O PHP-FPM trava ao ter muitos usuários enquanto faz um trabalho pesado

1

Eu tenho um servidor rodando Apache / 2.2.22 (Debian), PHP 5.6.17 como FPM e MySQL 5.6.25.

O projeto é executado usando um CMS chamado Redaxo (não acho que seja tão importante, mas vou lhe dizer de qualquer maneira). No Redaxo, existem algumas funções que demoram algum tempo (por exemplo, excluir cache e reconstruir demora de 1 a 2 minutos). Nesse momento, quando outros usuários entram no site, o FPM trava com 500 Internal Server Error e tenho que recarregar a página várias vezes até que o erro do servidor desapareça e o processo esteja concluído.

Notei que isso só acontecerá se muitos usuários estiverem no site ao mesmo tempo e somente quando operações pesadas forem concluídas.

10 usuários ao mesmo tempo apenas surfando = Nenhum problema
10 usuários ao mesmo tempo apenas surfando, enquanto deleção de cache = 500 Erro para todos.

Eu verifiquei isso, proibindo o site para todos, exceto eu (.htaccess negar / permitir com ip). Então eu fiz a operação pesada e não tive nenhum problema. Assim que várias pessoas estavam no site novamente, o problema estava lá novamente.

O que poderia ser? Quais informações você precisa de mim?

Estes valores são definidos (não comentados) no php-fpm.conf

[global]
pid = /run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
emergency_restart_threshold = 0
include=/etc/php5/fpm/pool.d/*.conf

Estes valores são definidos (não comentados) no projeto específico fpm.conf

[projectname]
user = projectname
group = projectname

listen = /var/run/php5-fpm-projectname.sock
listen.owner = projectname
listen.group = projectname
listen.mode = 0660

pm = dynamic
pm.max_children = 150
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

chdir = /

php_value[upload_max_filesize] = 128M
php_value[max_post_size] = 128M
php_value[max_execution_time] = 180
php_value[memory_limit] = 256M

O script quando ele falha faz muito com a criação do MySQL e do Arquivo se isso ajuda? Mas é bem grande, então não tenho certeza se devo postar aqui? Ou se é mesmo o problema?

O log de erros do apache diz isso

[Tue Feb 09 10:54:01 2016] [error] [client {IP}] (104)Connection reset by peer: FastCGI: comm with server "/fcgi-bin-php5-fpm-projectnmae" aborted: read failed
[Tue Feb 09 10:54:01 2016] [error] [client {IP}] FastCGI: incomplete headers (0 bytes) received from server "/fcgi-bin-php5-fpm-projectnmae"

ou isto

[Tue Feb 09 11:00:46 2016] [error] [client {IP}] FastCGI: incomplete headers (0 bytes) received from server "/fcgi-bin-php5-fpm-projectname"
[Tue Feb 09 11:00:48 2016] [error] [client {IP}] (104)Connection reset by peer: FastCGI: comm with server "/fcgi-bin-php5-fpm-projectname" aborted: read failed

O fpm-log diz o seguinte. Tempos sempre diferentes, claro,

[10-Feb-2016 09:40:59] WARNING: [pool projectname] child 10970 exited on signal 7 (SIGBUS) after 50.186611 seconds from start
[10-Feb-2016 09:40:59] NOTICE: [pool projectname] child 11092 started

Às vezes, há um aviso como esse

[09-Feb-2016 11:00:41] WARNING: [pool projectname] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 6 total children
[09-Feb-2016 11:00:42] WARNING: [pool projectname] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 7 total children
    
por Musterknabe 11.02.2016 / 11:16

1 resposta

1

Eu já vi erros semelhantes antes. Provavelmente está relacionado aos módulos de cache do PHP. Tente o seguinte:

;php-fpm.conf:
pm.max_spare_servers = 30
pm.max_requests = 200
pm.start_servers = 30
;enable slowlog - it gives you readable stacktrace
slowlog = /var/log/php-fpm-slow.log
request_slowlog_timeout = 10s
listen.backlog = -1

Em seguida, verifique sua instalação do PHP para módulos de cache. Eu vi problemas SIGBUS em instalações com o APC ativado. Tente isto para o módulo APC:

#apc.ini
apc.stat = 0
#or disable it:
apc.enabled = 0
    
por 16.02.2016 / 18:02