nginx + PHP-FPM (7.0) зависает на некоторых запросах

У меня возникла странная проблема со сборкой веб-приложения nginx + PHP-FPM с Symfony2. По сути, время от времени появляется запрос, который не обрабатывается, вместо этого браузер показывает, что ожидает начала приема (колесо в chrome вращается против часовой стрелки).

В журналах ошибок там нет ничего, что помогло бы мне идентифицировать проблему, ни в самом журнале приложений (Symfony 2.8), ни в nginx, ни в журналах php-fpm.

Что странно в том, что тайм-аут вообще отсутствует, что говорит о том, что php-fpm даже не получил этот запрос (верно?).

Возможно, есть кто-то, кто сталкивался с такими проблемами раньше и может знать вероятную причину?

Должен ли я предоставить что-нибудь, что может показаться актуальным (файлы конфигурации?), Пожалуйста, не стесняйтесь спрашивать в комментариях.

2 ответа

У меня такая же проблема. Я обнаружил, что если процесс не завершится, то в журнале не будет записей. Таким образом, запрос поступает в nginx и передается в апстрим, php-fpm. php-fpm не отвечает, и nginx истекает время ожидания. php-fpm продолжает работать. Итак, то, что я вижу, процессы накапливаются с течением времени, застряло в вызове flock(). Глядя на стек, я обнаружил, что это связано с попыткой получить блокировку файла для файла отладки. Я предлагаю вам проверить открытые файлы php-fpm, чтобы увидеть, что-нибудь зависло или работает, lsof |grep php-fpm, Тогда используйте strace или же gdb чтобы решить проблему дальше.

В моем случае я вызывал file_put_contents с эксклюзивной блокировкой, которую по какой-либо причине PHP иногда не может получить, а просто зависает навсегда.

Backtrace

0 0x00007f03f7081a67 in flock () from target:/usr/lib/libc.so.6

1 0x000055db7b9ecae6 in ?? ()

2 0x000055db7b9e83ad in _php_stream_set_option ()

3 0x000055db7b93e78e in ?? ()

4 0x000055db7badf0a3 in execute_ex ()

5 0x000055db7bae6fad in zend_execute ()

6 0x000055db7ba34c65 in zend_execute_scripts ()

7 0x000055db7b9cfb89 in php_execute_script ()

8 0x000055db7b7a1543 in ?? ()

9 0x00007f03f6fbaf4a in __libc_start_main () from target:/usr/lib/libc.so.6

10 0x000055db7b7a230a in _start ()

Ну, NGINX это здорово, хотя он не работает из коробки должным образом. Тебе нужен тюнинг. что ты сделал до сих пор?

Посмотрите на это простое руководство. Есть много других параметров, отличных от описанных здесь: https://www.nginx.com/blog/tuning-nginx/

Работник очереди невыполненных работ обрабатывает сообщения поддержки активности HTTP2

И многое другое... В моем случае у меня когда-то была такая проблема, и я решил ее путем увеличения лимита очереди (Backlog Queue)

Другие вопросы по тегам