Страница 1 из 1

Linux программа и её работа в FreeBSD

Добавлено: 2009-09-03 13:59:36
Mobilesfinks
Просьба не пинать ногами, а если есть какие то вопросы для уточнения то жду.
Возникла такая ситуация
Есть софтинка для обработки поступающих данных от удалённых клиентов (через интернет) и передачи этих данных другим клиентам. Обработку данных она не производит, просто тупо складирует в БД, а потом оттуда выдаёт, то что просят. Сама софтинка делалась на Debian Linux и для запуска во FreeBSD пришлось попрыгать вокруг с бубном. Если бы была альтернатива, то поставил бы из портов, но к сожалению это прекомпилированная софтинка, исходников не достать.

Пока нагрузка на неё была не значительной, то ошибка которые она выдавала не принимались в расчёт. Когда стали увеличивать количество клиентов передающих ей данные, то начались тормоза и задержки у клиентов желающих получить эти данные
после просмотра /var/log/messages обнаружил там следующие строчки:

Код: Выделить всё

server[843]: ERROR: Couldn't accept incoming connection: 30Exception_Create_Listen_Thread
При общении с разрабами, получил ответ мол переходите на Linux и будет вам счастье, но мне чёт не хочется иметь дело с Линуксом - не созрел пока, видимо.
Может кто подскажет в чём может быть проблема?
Моя система

Код: Выделить всё

uname -a
FreeBSD gpsk 7.2-PRERELEASE FreeBSD 7.2-PRERELEASE #2: Sat Aug 22 21:13:46 EEST 2009     user@gpsk:/usr/obj/usr/src/sys/main_kernell.220809  i386
Программулинка скомпилирована под ядро LInux 2.6

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-03 14:14:23
ProFTP
по умолчанию в эмуляции стоить ядро 2.4, можешь поставить там софт от GENTOO или от других линуксов...

а что за программа? QEMO

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-03 14:40:13
Mobilesfinks
ProFTP писал(а):по умолчанию в эмуляции стоить ядро 2.4, можешь поставить там софт от GENTOO или от других линуксов...

а что за программа? QEMO
1. Я выставил версию ядра

Код: Выделить всё

sysctl compat.linux.osrelease=2.6.23.1
вопрос как узнать какая версия ядра сейчас стоит?
устанавливал порт /usr/ports/accessibility/linux-f8-atk

2. Навигационный сервер

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-04 8:39:11
Mobilesfinks
ProFTP писал(а):по умолчанию в эмуляции стоить ядро 2.4
Как поставить более позднее ядро в эмулятор? Кто сталкивался?

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-04 14:48:34
ProFTP
точно не знаю:
http://www.freebsd.org/cgi/cvsweb.cgi/p ... _base-f10/
http://www.freebsd.org/cgi/cvsweb.cgi/p ... oo-stage3/
ProFTP писал(а):можешь поставить там софт от GENTOO или от других линуксов...

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-04 15:43:31
weec
то не эмулятор, а linuxolator (LinuxABI) - прослойка для FreeBSD-ядра
на сколько мне известно стабильная работа linuxolator-а объявлена пока лишь для ветки Linux-ядра 2.4

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-04 15:56:54
Alex_hha
При общении с разрабами, получил ответ мол переходите на Linux и будет вам счастье, но мне чёт не хочется иметь дело с Линуксом - не созрел пока, видимо.
не бойся, он не кусается. Как вариант поставь vmware на freebsd и там запусти Linux и посомтри как будет себя вести эта программа

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-05 18:47:02
iZEN
emulators/linux_base-f10 ставится на ура и работает (у меня на [i386] работал с Sun WTK 2.2 — этот тоже прекомпилированный бинарный пакет без исходников).
Для поддержки X'ов нужно ещё установить x11/linux-f10-xorg-libs.

Полный алгоритм установки Linux-эмулятора "Fedora 10":

Код: Выделить всё

% kldunload linux
% echo 'compat.linux.osrelease=2.6.16' >> /etc/sysctl.conf && sysctl compat.linux.osrelease=2.6.16
% kldload linux
% echo 'OVERRIDE_LINUX_BASE_PORT=f10' >> /etc/make.conf
% echo 'OVERRIDE_LINUX_NONBASE_PORTS=f10' >> /etc/make.conf
% portinstall -p emulators/linux_base-f10
% echo 'linux_enable="YES"' >> /etc/rc.conf
% echo 'linprocfs /compat/linux/proc linprocfs rw 0 0' >> /etc/fstab && mount -a
% portinstall -p x11/linux-f10-xorg-libs

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-08 23:51:58
Mobilesfinks
Подозрение что есть ограничение на количество одновременных подключений. Где такое можно глянуть?

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-09 5:19:53
zingel
Exception_Create_Listen_Thread - проблемы с сокетами, покажи сюда

Код: Выделить всё

sockstat -4c

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 12:08:55
Mobilesfinks
угу, спасибо, я уже сам докопался что сокеты
короче по этой команде выдаёт аж > 11000 конектов
всего запущено 35 процессов этой програмки, в приложении полный вывод
да ещё посмотрел top - оперативки мало осталось. Всего Гиг стоит.
Как с этим (с количеством сокетов) бороться или где подкрутить что бы само боролось?

ЗЫ Сейчас копаю инет. Если я правильно понимаю, то надо использовать inetd для контроля за соединениями имеющейся программы. так ли?
или каким то образом заставить закрывать неиспользуемые сокеты которые зависают и сервер открывает новые.

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 15:06:27
Mobilesfinks
Ещё момент. Наблюдаю следующее:
программа работает и количество сокетов постепенно растёт. После достижения какого-то предела, программа завершается. И заново больше не запускается. Помогает перезагрузка.

Каким образом можно чистить сокеты?

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 15:18:50
paradox
думаеться мне что в линуксе будут такие же проблемы
на досуге погляжу
где там как что ограничиваеться

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 17:02:46
paradox
server[843]: ERROR: Couldn't accept incoming connection: 30Exception_Create_Listen_Thread
не понял
так программа работает?
или падает?
если работает то ошибки нет
просто в бсд ограничено количество создаваемых thread

pthread_create
при ошибке
будет возращать
30Exception_Create_Listen_Thread

потому что в системе уже слишком много потоков
увы это прощет линукс разработчиков
плодить потоки это не лучший способ обработать много соединений
даже я бы сказал самый тупой способ

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 17:35:36
Mobilesfinks
paradox писал(а):
server[843]: ERROR: Couldn't accept incoming connection: 30Exception_Create_Listen_Thread
не понял
так программа работает?
или падает?
если работает то ошибки нет
просто в бсд ограничено количество создаваемых thread

pthread_create
при ошибке
будет возращать
30Exception_Create_Listen_Thread

потому что в системе уже слишком много потоков
увы это прощет линукс разработчиков
плодить потоки это не лучший способ обработать много соединений
даже я бы сказал самый тупой способ
программа работает, но через какое то время падает и больше заводится не хочет пока не ребутнёшь машину.
если мониторить с помощью

Код: Выделить всё

sockstat -4c | grep -ic server
заметно постепенное увеличение сокетов.

Код: Выделить всё

# sysctl kern.ipc.maxsockets
kern.ipc.maxsockets: 25600
я думаю когда достигается это значение программа умирает

Вопрос в том как внешними средствами (средствами операционки а не самой программы) ограничить количество открываемых сокетов? Или какими способами можно убивать те которые уже открыты но не используются (где вообще глянуть используются они или нет)?

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 17:40:53
paradox
Вопрос в том как внешними средствами (средствами операционки а не самой программы) ограничить количество открываемых сокетов? Или какими способами можно убивать те которые уже открыты но не используются (где вообще глянуть используются они или нет)?
думаю программа должна сама корректо закрывать их
но увы она это делает плохо
поэтому
я думаю что фаерволом можно как то поставить лимит на порт подключения этой проги

зы
вообще заметно что автор программы в целом новичек в юниксах
но как минимум
можешь попробовать его убедить поставить бсд
и хотя бы скомпилировать и дать бинарники уже под бсд
пусть она падает
но покарайней мере уже ты освободишься от линукс прослойки

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 18:13:12
iZEN
Mobilesfinks писал(а):Вопрос в том как внешними средствами (средствами операционки а не самой программы) ограничить количество открываемых сокетов? Или какими способами можно убивать те которые уже открыты но не используются (где вообще глянуть используются они или нет)?
man pf.conf
PF можно простыми правилами заставить ограничивать количество (TCP)IP-соединений и время жизни созданных соединений.
Часть конфига у меня:

Код: Выделить всё

#-------------------
#3/Options
# тем, кто лезет туда, куда не нужно, - бить по рукам
set block-policy drop
# на интерфейсах петли пакеты не фильтровать
set skip on { lo }
# укороченный таймаут для состояния установленного tcp соединения
set timeout { frag 10, tcp.established 2400 }
#-------------------
#4/Scrub
# Нормализовать все входящие пакеты
scrub in all

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 19:23:18
Mobilesfinks
paradox писал(а): зы
вообще заметно что автор программы в целом новичек в юниксах
но как минимум можешь попробовать его убедить поставить бсд и хотя бы скомпилировать и дать бинарники уже под бсд пусть она падает но покарайней мере уже ты освободишься от линукс прослойки
я сегодня целый день выводил на мысль о том что нужно БСД версию делать. Всё чем отмазывался это " мне же нужно ставить БСД, разбираться в ней, короче у меня времени нет. под линуксом же работает. обращайся к моему шефу если ты так хочешь под БСД, ставь линукс я настрою" - это довольно вольно но всё же близко к тексту

Накатал письмо их директору, жду ответа, но думаю глухо. Автор программы действительно при общении (в аське) вызывает чувство слабо компетентного человека в области программирования. Я его конечно лично не знаю, но такое вот впечатление сложилось. Особенно от его мямлянья и ссылания на шефа.

Сейчас заметил такую картину. Вечером, когда нагрузки основной нет, количество открытых сокетов держится в пределах 5-6 тысяч.
iZEN писал(а): man pf.conf
PF можно простыми правилами заставить ограничивать количество (TCP)IP-соединений и время жизни созданных соединений.
Часть конфига у меня:

Код: Выделить всё

#-------------------
#3/Options
# тем, кто лезет туда, куда не нужно, - бить по рукам
set block-policy drop
# на интерфейсах петли пакеты не фильтровать
set skip on { lo }
# укороченный таймаут для состояния установленного tcp соединения
set timeout { frag 10, tcp.established 2400 }
#-------------------
#4/Scrub
# Нормализовать все входящие пакеты
scrub in all
Спасибо, попзже проверю, может поможет ))

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-11 19:38:52
paradox
я сегодня целый день выводил на мысль о том что нужно БСД версию делать. Всё чем отмазывался это " мне же нужно ставить БСД, разбираться в ней, короче у меня времени нет. под линуксом же работает. обращайся к моему шефу если ты так хочешь под БСД, ставь линукс я настрою" - это довольно вольно но всё же близко к тексту
накатай ему мануал
как в пять строчек установить бсд

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-14 15:45:47
Mobilesfinks
Вопрос к знатокам. А что если завернуть программу через стандартный inetd? Что для этого нужно? может кто сталкивался.
Просто сейчас читаю статью и там сказано что демоны должны быть указаны в файле /etc/services т.е. как я понял я должен прописать свою софтину туда а потом уже запускать её через inetd?

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-14 15:52:46
paradox
елки моталки
inetd сам все запускает и контролирует количество коннектов
man inetd

Re: Linux программа и её работа в FreeBSD

Добавлено: 2009-09-14 16:03:18
Mobilesfinks
ясно будем пробовать.