Назад | Перейти на главную страницу

Параметр max_requests PHP-FPM вызывает 502

На установке с использованием nginx с участием PHP-FPM v5.3.3, Я заметил, что в журнале ошибок nginx часто возникают следующие ошибки:

Feb 16 15:00:22 mymachine www.example.com 2015/02/16 15:00:20 [error] 20254#0:
*1448249 readv() failed (104: Connection reset by peer) while reading upstream
[...]

Глядя на php-fpm.log файла я заметил следующее:

[16-Feb-2015 15:00:20] NOTICE: [pool www] child 22279 exited with code 0 after
47983.681002 seconds from start
[16-Feb-2015 15:00:20] NOTICE: [pool www] child 10625 started

Это переработка рабочих как pm.max_requests наборы директив конфигурации.

Я (разумно) предположил, что PHP-FPM будет корректно обрабатывать любое принятое соединение / запрос перед повторным использованием рабочего, поскольку эта задача не подразумевает каких-либо чрезвычайных ситуаций.

  1. Это неправильная конфигурация?
  2. Это недостаток PHP-FPM 5.3.3?
  3. Это недостаток всех версий PHP-FPM?
  1. Нет. Это действительно так.
  2. Может быть. Вам действительно стоит подумать об обновлении, по крайней мере, до последней версии 5.3.x, но лучше обновить ее до последней версии 5.x, поскольку 5.3.x больше не поддерживается.
  3. Нет. У меня такая конфигурация работала на всех версиях. Кроме того, имея pm.max_requests набор - обычная практика.

Может быть вам просто нужно несколько рабочих бегать. Вам действительно следует исследовать количество занятых и работающих воркеров, php-fpm имеет для этого внутренний ресурс, pm.status_path - вы можете увидеть, что в нем, с помощью wget или любого другого http-клиента:

[root@sol etc]# wget -O - -q http://localhost/status
pool:                 www
process manager:      dynamic
start time:           29/Jan/2015:11:36:20 +0300
start since:          1633615
accepted conn:        996160
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       34
active processes:     1
total processes:      35
max active processes: 18
max children reached: 0
slow requests:        0

Он говорит, что у меня один активный процесс и один неактивный - значит, я в порядке. Максимальное количество занятых процессов было 18, поэтому с самого начала у меня все было в порядке.