spawn-fcgi / rápido CGi php falha sem rastros nos logs, no Gentoo

3

Eu recentemente mudei do apache para uma solução Nginx / fastcgi, tive que rodar em um sistema Fedora e não tive problemas, mas, desde que mudei tudo para o Gentoo, o daemon Spawn-fCGI / fastcgi php morre, e eu posso é possível descobrir qualquer relatório de erros em / var / log / messages, então não sei por que isso acontece.

Eu vi que fastcgi é de alguma forma diferente da distribuição do fedora, no gentoo, pois tem diferentes arquivos conf e scripts de inicialização init.d, alguém pode me ajudar a torná-lo mais estável? O número de pedidos que eu recebi não é diferente dos que eu tinha no fedora, então eu uso o conf padrão que vem com a distro ... e em algumas horas simplesmente morre ...

Muito obrigado

    
por PartySoft 05.04.2010 / 19:51

3 respostas

1

Aqui está o conteúdo do meu arquivo /etc/conf.d/php-cgi (é uma cópia modificada do arquivo original 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"

Em seguida, para criar o arquivo init.d, basta criar um link simbólico para o arquivo spawn-fcgi init.d original com o nome do seu arquivo conf.d (php-cgi no meu caso):

% sudo ln -s /etc/init.d/spawn-fcgi /etc/init.d/php-cgi

Então você pode começar com:

% /etc/init.d/php-cgi start

e adicione-o ao nível de inicialização padrão

% rc-update add php-cgi default

O único grau de liberdade que você tem é ajustando esses dois valores:

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

Mais crianças podem lidar com mais solicitações ao mesmo tempo, mas consomem mais memória.
Dependendo da sua configuração de hardware, adapte essas duas configurações.

    
por 12.08.2010 / 01:55
1

Obtive exatamente o mesmo problema aqui ... Corrigido executando spawn-fcgi no modo interativo (para que ele não bifurque) envolvido em um loop while infinito (para que ele seja reiniciado).

    
por 25.04.2011 / 10:20
0

Eu tenho os mesmos problemas ...

Eu encontrei duas soluções:

  • cron o fastcgi restart: "0 * * * * /etc/init.d/fastcgi restart". É feio mas funciona
  • o problema parece vir do processo php-cgi que se torna instável depois de muito tempo. Isso pode ser corrigido forçando o php-cgi a renovar os processos após um número máximo de pedidos, por uma variável env: "export PHP_FCGI_MAX_REQUESTS = 500"
por 16.07.2010 / 17:31