クライアントのWhatsAppsが、502不良ゲートウェイNGINXと書かれたウェブサイトのスクリーンショットを表示したときの感想 エラー? (一日を始めるために)これより悪いことはありませんね?そのような一日を始めてはいけないことを願っていますが、そのような状況に陥った場合の回復方法を説明します。
問題とその解決策について説明する前に、私のホスティング環境はFPMPHPハンドラーを備えたNGINXウェブサーバーを利用していることを思い出してください。
502 BadGatewayNGINXエラーの理由
NGINXエラーログ(/var/log/nginx/nginx.log)
からエラーのデバッグを開始しました 以下のエラーメッセージが見つかりました。
2019/12/11 04:30:43 [error] 27570#27570: *48599 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 17.58.98.98, server: techglimpse.com, request: "GET /pure-css3-shapes/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "techglimpse.com"
エラーメッセージがPHPハンドラーに関連していて、/var/log/php-fpm/error.log
にあるPHP-FPMエラーログを調べるようにリダイレクトされたことは明らかです。 以下のエラーメッセージに気づきました:
[08-Dec-2019 03:30:01] NOTICE: error log file re-opened [10-Dec-2019 21:00:16] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
これで、pm.max_children
が原因で、PHP-FPMマスタープロセスが新しい子プロセスを生成できないことが明らかになりました。 制限に達したため、502の不正なゲートウェイエラーが発生しました。
エラーを修正する方法:サーバーがpm.max_children設定に達しました、それを上げることを検討してください
解決策は、pm.max_children
を増やすことです。 サーバーの仕様に基づく制限。ウェブサイトが大量のトラフィックを受信した場合、ワーカーが再利用されることはなく、RAMの使用量は時間の経過とともに無期限に増加し、サーバーのメモリ不足状態になるため、制限をやみくもに増やしないでください。
したがって、pm.max_children
スワップの使用状況を監視しながら、慎重かつ段階的に増やす必要があります。
pm.max_children = ((total RAM in MB) - (RAM usage by MySQL and others taken together in MB)) / 80ノート
ここで、80MBはPHP-FPMワーカープロセスの平均重量です。
上記の計算に基づいて、PHP-FPMのそれぞれのドメイン構成ファイルのpm.max_children値を増やします。私の場合:/etc/php-fpm.d/techglimpse.conf
pm = ondemand pm.max_children = 200
次に、PHP-FPMおよびNGINXサービスを再起動します
systemctl restart php-fpm nginxノート
pm.max_children
の影響を受けたすべてのドメインをフィルタリングします 上記の設定を影響を受けるものだけに適用します。
アプリケーションが使用するメモリを見つける方法
以下のコマンドを実行して、それぞれのアプリケーションで使用されているメモリを見つけます。
#ps -o pid,user,%mem,command ax | sort -b -k3 -r PID USER %MEM COMMAND 1355 mysql 14.5 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid 543 root 0.3 /usr/lib/systemd/systemd-journald 9254 nginx 0.3 php-fpm: pool www 9251 nginx 0.3 php-fpm: pool www
上記の例では、MySQLは合計メモリの約14%を使用しています。