php-cgi падает после 50 запросов

saxon

Новичок
Привет.
Есть такая конфигурация:
Win, nginx, php, memcached, mysql.
Есть очередь сообщений с реализацией на PHP. Класс в деструкторе и конструкторе загружает/сохраняет данные в memcached. методы get, set и т.д.
каждый клиент периодически делает запрос get - получает список сообщений, которые ему отправили другие клиенты или система.
Клиент сделан на js. аяксом каждые 2 секунды отправляет запрос get.

Все прекрасно работает, но проблема такая вот: после небольшого количества запросов все процессы php-cgi просто закрываются. Причина не понятна. логов никаких нет от php. все остальное работает нормально и не закрывается. если запустить заново php-cgi, то система продолжает работать.
 

Gas

может по одной?
у меня как-то было похожее, отрабатывало PHP_FCGI_MAX_REQUESTS * PHP_FCGI_CHILDREN количество запросов, все обработчики умирали, а новые не форкались. Как конкретно решил не помню, вроде какие-то ошибки в скрипте запуска php-fcgi были.
Ну а вообще сейчас имеет смысл php-fpm ставить вместо php-fcgi
 

michelle

Новичок
Ну а вообще сейчас имеет смысл php-fpm ставить вместо php-fcgi
Работает, только ненадо конфигурировать с сокетами - будет падать.
То есть должно быть что-то вроде такого listen = 127.0.0.1:9000
 

saxon

Новичок
Первый пункт в моей конфигурации - Win. у fpm нет сборки под виндоус.
В логах ничего подозрительного нет. в нгинксе просто со временем появляется 504 Gateway timeout и все. в пхп тоже глухо. просто отваливается тихонечко и все.
придется пробовать на lighthttpd. настройка просто долгая и мучительная..
 

korvin0

моська
У меня была похожая ситуация на win+apache+php. Было запущено одновременно порядка 50 php потоков. В какой-то произвольный момент времени все процессы могли остановиться, в логах апача писало "[Thu Feb 04 21:25:20 2010] [notice] Parent: child process exited with status xxx -- Restarting.". Также периодически мог апач выбрасывать ошибки в windows-окошке, при этом также останавливались потоки.
Пробовал разные версии апача и пхп, подключал пхп как модуль и как cgi, но ничего не помогло. Точнее, глюков становилось то больше, то меньше, но полной работоспособности так и не удалось достичь. Пришлось сделать яваскрипт-костыль, который перезапускал phpшный процесс при отсутствии в нем активности.
А вообще под виндой php лучше использовать в одном потоке )
 

saxon

Новичок
а что за костыль? есть у меня странное чувство, что мне такой тоже пригодится..
в идеале нужно под вин запустить php+mysql (+memcached или что-то полегче) абсолютно в любом виде. Нагрузок можно считать, что нет. Нужно самое легкое и простое решение. Подойдет любое решение, пусть там все будет встроено - абсолютно не важно. нужно просто запустить это дело.
 

korvin0

моська
Ну, в моем случае все потоки крутились в iframe'ах в браузере, и периодически в них выводилась строка '<script>top.process=1;</script>'. В конце же своей работы каждый процесс однократно выводил '<script>top.process=2;</script>'.

В родительском же окне у меня было что-то типа такого:
<script>
process = 0;
function sec()
{
if (process == 1)
{ // все нормально, процесс идет
process = 0;
}
else if (process == 0)
{ // процесс почему-то не идет, перезапускаем страницу со всеми iframe-ами
window.location.reload();
}
}
setInterval(sec, 60000)
</script>

К сожалению, это работает, только если phpшный процесс позволяет выводить текст на лету в процессе своей работы. Почему-то не на всех серверах это возможно, а почему - я и сам не знаю.
 
Сверху