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

Состояние PHP FPM Завершается, но никогда не завершается

Мы запускаем приложение Symfony на Ubuntu 14.04 с Nginx и PHP-FPM

Проблема в том, что отдельные PHP FPM иногда зависают на наших производственных серверах.

У меня есть вывод со страницы состояния:

pid:                  13416
state:                Finishing
start time:           08/Sep/2014:12:35:29 +1000
start since:          10548
requests:             3
request duration:     158138427297
request method:       GET
request URI:          /app.php?searchText=Search+term&page=2
content length:       0
user:                 -
script:               /var/projects/site_path/app.php
last request cpu:     0.00
last request memory:  0

Не могу понять, почему зависает этот процесс.

Если я ограничу процесс, он просто зациклится с этим:

# strace -p 13416
gettimeofday({1410154710, 385743}, NULL) = 0

Я проверил журналы доступа Nginx и сопоставил запрос, и запрос в порядке, он возвращает 200, и с помощью URL-адреса невозможно воспроизвести ошибки).

Любая помощь будет принята с благодарностью

Журналы доступа:

172.30.12.110 - - [08/Sep/2014:12:35:29 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "/search?searchText=Search+term" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:35:32 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:34 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11169 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:51 +1000] "GET /search?searchText=OSearch+term&page=3 HTTP/1.1" 200 11158 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=2" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:36:50 +1000] "GET /profile/ HTTP/1.1" 200 8108 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=4" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko

Оказывается, в определенных ситуациях мы использовали недопустимые ключи Memcached. Из-за этого Memcached умирал без ошибок, и процесс PHP оставался в живых.

В нашем случае мы настроили mod_proxy_fastcgi с сокетом домена Unix и повторным использованием соединения (enablereuse = on), однако, как упоминалось в комментарии lkraav на https://github.com/icing/mod_h2/issues/62:

# UDS does not currently support connection reuse

Это было причиной того, что дочерние процессы FPM накапливались в состоянии завершения. Удаление повторного использования соединений решило проблему и значительно стабилизировало систему.

Поскольку вы говорите, что fpm зависает, вам следует смотреть логи fpm вместо nginx. Включите slow_log и ведите журнал отладки в php-fpm.config. Также попробуйте strace с разными вариантами, чтобы увидеть больше. возможно, это связано с определенной функцией php