web-dev-qa-db-ja.com

nginx + PHP-FPM(7.0)が一部のリクエストでハングする

Symfony2を使用したnginx + PHP-FPMでホストされるWebアプリのビルドで奇妙な問題が発生しています。基本的に、処理されないリクエストが時々ありますが、代わりにブラウザは受信を開始するのを待っていることを示します(chromeのホイールは反時計回りに回転しています)。

アプリログ自体(Symfony 2.8)、nginx、php-fpmログのいずれにも、問題を特定するのに役立つエラーログには何もありません。

奇妙なことに、タイムアウトがまったくないので、php-fpmがそのリクエストを受信して​​いなかったことがわかります(そうですか?)。

おそらく、以前にそのような問題を経験したことがあり、考えられる原因を知っている人はいますか?

関連性があると思われるもの(設定ファイル?)を提供する必要がありますので、遠慮なくコメントで質問してください。

2
user401676

同じ問題があります。私が見つけたのは、プロセスが完了しない場合、ログエントリがないということです。そのため、リクエストは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 ()

2
Derek Labian

NGINXは素晴らしいですが、そのままでは正しく機能しません。調整が必要です。これまでに何をしましたか?

この簡単なガイドを見てください。ここで説明されているもの以外にも多くのパラメーターがあります: https://www.nginx.com/blog/tuning-nginx/

バックログキューワーカーはキープアライブ接続HTTP2を処理します

そしてもっと...私の場合、私はかつてこのような問題を抱えていました、そして私は私のキュー制限(バックログキュー)を増やすことによって解決しました

0
lucasmx