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

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

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

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

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

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

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

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

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

Обратная трассировка

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)