работа под inetd...., странные зависания...

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

работа под inetd...., странные зависания...

Сообщение BlackBiker » 03.10.2008 14:22:19

Здравствуйте.
Есть небольшой сервер, написанный на FPC (2.2.0), который работает из под inetd. Периодически система наглухо вешается, причем только тогда, когда постоянно идут запросы на этот сервер, достаточно продолжительное время (5-7 часов). Пытаясь понять причину, убирал код и дошел до такого вот :
Код: Выделить всё
var
  s:String;

begin
s := '';
system.ReadLn(s);
if s <> '' then
begin
try
  s := DateTimeToStr(now);
  WriteLn(s);
except
  on E:Exception do
   WriteLog(E.Message);
end;   
end.


То есть на любой запрос идет ответ с текущей датой. Но и в этом случае происходят зависания, причем иногда после перезагрузки слетает дата на компе
В логах сообщений о каких-либо ошибках не нахожу. Утечек памяти вроде тоже нет (судя по top). В какую сторону еще копать, пока не представляю....
Система Slackware, ядро 2.6.14 , компилятор FPC 2.2.0.
BlackBiker
незнакомец
 
Сообщения: 5
Зарегистрирован: 03.10.2008 14:13:00

Re: работа под inetd...., странные зависания...

Сообщение Attid » 03.10.2008 18:01:52

вот мне как-то в сервере запускаемом от inetd не нравятся
Код: Выделить всё
  ReadLn(s);
  WriteLn(s);
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: работа под inetd...., странные зависания...

Сообщение BlackBiker » 03.10.2008 20:48:26

Пробовал менять на read и write - то же самое. А что именно не нравится ? Читаем и пишем в стандартный поток...
BlackBiker
незнакомец
 
Сообщения: 5
Зарегистрирован: 03.10.2008 14:13:00

Re: работа под inetd...., странные зависания...

Сообщение Sergei I. Gorelkin » 03.10.2008 23:16:21

Если бы проблемы были со стандартным вводом-выводом, оно бы сыпалось на первых же запросах. Тут явно что-то более другое...

Я бы попробовал ту же самую тестовую программу переписать на Си, благо она простая. Если будет виснуть - значит по крайней мере дело не в FPC.
Если не будет - значит есть в rtl какой-то хитрый баг.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: работа под inetd...., странные зависания...

Сообщение BlackBiker » 04.10.2008 09:40:39

Sergei I. Gorelkin писал(а):Если бы проблемы были со стандартным вводом-выводом, оно бы сыпалось на первых же запросах. Тут явно что-то более другое...

Я бы попробовал ту же самую тестовую программу переписать на Си, благо она простая. Если будет виснуть - значит по крайней мере дело не в FPC.
Если не будет - значит есть в rtl какой-то хитрый баг.

Вот! Именно это я и сделал. Тестовый пример не виснет, более того, программа уже наполовину переделана на Си и работает неделями. При этом ни в случае Паскаля ,ни в случае Си нет ни утечек памяти, ни зомби, ни незакрытых файловых дескрипторов. В логах системы никаких проблем не видно. Пробовал на нескольких ядрах , правда только на Slackware (вначале Zenwalk 4, потом дистр от фирмы-поставщика самой железки).
Еще интересный момент. Другая программа (демон), написанная на FPC - работает нормально. в течении долгого времени. То есть если прога запускается один раз - проблемы нет. Если многократно (из под inetd)- что-то в конце концов происходит. Причем похоже система наглухо виснет еше до выполнения первой строки программы.
Приходится перейти на Си, хотя очень не хочется.
BlackBiker
незнакомец
 
Сообщения: 5
Зарегистрирован: 03.10.2008 14:13:00

Re: работа под inetd...., странные зависания...

Сообщение Sergei I. Gorelkin » 04.10.2008 12:07:09

То, что в логах чисто - оно понятно, видимо система накрывается так, что просто не успевает туда что-либо записать. Или же логгинг того, что нужно, просто не включен. Возможно, помогла бы пересборка ядра с включением каких-нибудь отладочных опций.

Не может ли быть такого, что в критический момент запросов (и соответственно процессов) становится слишком много и система больше не может ничего запустить?
Еще вариант - попробовать использовать в программе libc, например подключив модуль cmem (с ним будет использоваться сишный менеджер памяти), или более жестко - пересобрать rtl с OPT=-dFPC_USE_LIBC (хотя я даже не знаю, сработает ли это). Так как любая сишная программа взаимодействует с внешним миром через libc, а программа на FPC по умолчанию обращается к ядру напрямую - разница очень даже может быть.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: работа под inetd...., странные зависания...

Сообщение BlackBiker » 04.10.2008 13:00:29

Sergei I. Gorelkin писал(а):Не может ли быть такого, что в критический момент запросов (и соответственно процессов) становится слишком много и система больше не может ничего запустить?

Это вряд ли - я тестировал одним-двумя клиентами. Процессов много не было. Насчет cmem - спасибо, попробую.
BlackBiker
незнакомец
 
Сообщения: 5
Зарегистрирован: 03.10.2008 14:13:00

Re: работа под inetd...., странные зависания...

Сообщение Timid » 04.10.2008 19:28:44

2BlackBiker,

Попробуйте не использовать переменную s для сохранения значения даты-времени. Помнится, что оптимизатор fpc не совсем так же "прозрачен" как в Delphi. Я беспокоюсь, что память освобождается и выделяется некорректно. Проблема была может быть в try (это не проблема языка, а конкретной реализации).
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: работа под inetd...., странные зависания...

Сообщение Logo » 04.10.2008 23:24:47

Какие модули в uses прописаны? Попробуйте убрать лишние. Вам нужен только sysutils для DateTimeToStr(now). Можно и этот убрать для проверки.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: работа под inetd...., странные зависания...

Сообщение BlackBiker » 05.10.2008 00:01:14

Да тут похоже до переменных дело еще не доходит. Система виснет еще до начала выполнения программы (пробовал все подробно в syslog писать).
BlackBiker
незнакомец
 
Сообщения: 5
Зарегистрирован: 03.10.2008 14:13:00

Re: работа под inetd...., странные зависания...

Сообщение Logo » 05.10.2008 13:36:47

BlackBiker писал(а):Да тут похоже до переменных дело еще не доходит. Система виснет еще до начала выполнения программы (пробовал все подробно в syslog писать).

Некоторые модули инициализируются на этапе загрузки, до выполнения программы, некоторые нужно прописывать в USES в строгой последовательности, например, cthreads всегда должен быть первым. Судя по описаному Вами, именно какой-то модуль не правильно себя ведет.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: работа под inetd...., странные зависания...

Сообщение Sergei I. Gorelkin » 05.10.2008 18:29:49

Где-то пробегала информация о том, что ядро 2.6 стало по-человечески работать начиная с 2.6.18, а до того с ним было недетские проблемы. Slackware 11 выходила вроде бы именно с ним, а сколько ей уже лет... Так что я бы в данной ситуации ядро обновил. Компилятор до 2.2.2 тоже вполне можно...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru