spawn-fcgi/ fast CGi php вылетает без следов в логах, на Gentoo
Недавно я перешел с Apache на решение Nginx/fastcgi, у меня оно работало в системе Fedora и у меня не было проблем, но, поскольку я переместил все в Gentoo, демон phawn Spawn-fCGI / fastcgi умирает, и я не могу найти любые сообщения об ошибках в /var/log/messages, поэтому я не знаю, почему это происходит.
Я видел, что fastcgi каким-то образом отличается от дистрибутива fedora в gentoo, поскольку в нем есть разные conf-файлы и сценарии запуска init.d. Может кто-нибудь помочь мне сделать его более стабильным? Количество запросов, которые у меня были, ничем не отличается от тех, что у меня были на fedora, поэтому я использую стандартную конфигурацию, поставляемую с дистрибутивом... и примерно через несколько часов она просто умирает...
большое спасибо
3 ответа
Вот содержание моего /etc/conf.d/php-cgi
файл (это модифицированная копия исходного файла spawn-fcgi conf.d):
# The FCGI process can be made available through a filesystem socket or
# through a inet socket. One and only one of the two types must be choosen.
# Default is the inet socket.
# The filename specified by
# FCGI_SOCKET will be suffixed with a number for each child process, for
# example, fcgi.socket-1.
# Leave empty to use an IP socket (default). See below. Enabling this,
# disables the IP socket.
#
FCGI_SOCKET=
# When using FCGI_PORT, connections will only be accepted from the following
# address. The default is 127.0.0.1. Use 0.0.0.0 to bind to all addresses.
#
FCGI_ADDRESS=127.0.0.1
# The port specified by FCGI_PORT is the port used
# by the first child process. If this is set to 1234 then subsequent child
# processes will use 1235, 1236, etc.
#
FCGI_PORT=2000
# The path to your FastCGI application. These sometimes carry the .fcgi
# extension but not always. For PHP, you should usually point this to
# /usr/bin/php-cgi.
#
FCGI_PROGRAM=/usr/bin/php-cgi
#FCGI_PROGRAM=/usr/bin/spawn-fcgi
# The number of child processes to spawn. The default is 1.
#
FCGI_CHILDREN=1
# If you want to run your application inside a chroot then specify the
# directory here. Leave this blank otherwise.
#
FCGI_CHROOT=
# If you want to run your application from a specific directiory specify
# it here. Leave this blank otherwise.
#
FCGI_CHDIR=
# The user and group to run your application as. If you do not specify these,
# the application will be run as root:root.
#
FCGI_USER=nginx
FCGI_GROUP=nginx
# Additional options you might want to pass to spawn-fcgi
#
#FCGI_EXTRA_OPTIONS=
# If your application requires additional environment variables, you may
# specify them here. See PHP example below.
#
#ALLOWED_ENV="PATH"
# PHP ONLY :: These two options are specific to PHP. The first is the number
# of child processes to spawn. The second is the number of requests to be
# served by a single PHP process before it is restarted.
#
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500
#
# For this to work you would set
ALLOWED_ENV="PATH PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS"
Затем, чтобы создать файл init.d, просто создайте символическую ссылку на исходный файл spawn-fcgi init.d с именем вашего файла conf.d (в моем случае php-cgi):
% sudo ln -s /etc/init.d/spawn-fcgi /etc/init.d/php-cgi
Тогда вы можете начать это с:
% /etc/init.d/php-cgi start
и добавьте его на уровень загрузки по умолчанию
% rc-update add php-cgi default
Единственная степень свободы, которую вы имеете, это изменение этих двух ценностей:
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500
Больше детей могут обрабатывать больше запросов одновременно, но это потребляет больше памяти.
В зависимости от конфигурации оборудования измените эти две настройки.
У меня точно такая же проблема... Исправлена ошибка, возникающая при запуске spawn-fcgi в интерактивном режиме (чтобы он не разворачивался) в бесконечном цикле while (чтобы он перезапускался).
У меня такие же проблемы...
Я столкнулся с двумя решениями:
- cron перезапуск fastcgi: "0 * * * * /etc/init.d/fastcgi restart". Это некрасиво, но это работает
- проблема, кажется, происходит из-за процесса php-cgi, который становится нестабильным после долгого времени. Это можно исправить, заставив php-cgi обновлять процессы после максимального числа запросов, с помощью переменной env: "export PHP_FCGI_MAX_REQUESTS=500"