詳細なディスカッション: Nginx 502 Bad Gateway エラーの解決策_PHP チュートリアル
max_children=40、各子は平均 20M ~ 30M のメモリを占有します。子の数が増えると、同時に受け入れられる同時実行数も増えます。通常、子の値は、Web サイト上の同時実行数の最大値 + 変動値になります。この値は、必要なメモリ使用量×メモリ使用量になります。
max_requests = N は、各子が N 個のリクエストを受け入れた後、自身を強制終了し、子を再確立することを意味します。
PV / max_children = 各子が受け入れたリクエストの数 [デフォルトでは、ブラウズごとに PHP プログラムを 1 回だけ呼び出します。おそらく非同期的に呼び出されます。インターフェースはどうですか? ]
たとえば、上記の値が 1000 で、10240 を定義すると、fpm が子を強制終了して再構築するのに 10 日以上かかります。メモリ リークがある場合、プロセスは大量のメモリを占有し、実行できなくなります。が解放されると、fpm の処理能力が低下し、不可解なエラーが発生します。
しかし、この値を小さすぎると、fpm は頻繁に子を強制終了して再構築することになり、追加のオーバーヘッドも発生します。
もちろん、最善の最適化は、常にデバッグを行い、Web サイトの運用に基づいてバランス ポイントを見つけることです。
max_children への遅延アプローチもあります php が 5.3 の場合は、fpm のスタイルを apache に似たものに設定できます。このとき、子の数は fpm によって自動的に制御されます。対応する設定パラメータは次のとおりです。
start_servers: 開始プロセスの数
min_spare_servers: プロセスの最小数
max_spare_servers: プロセスの最大数
サーバーが比較的アイドル状態の場合、fpm はリソースを節約するためにいくつかの冗長な子をアクティブに強制終了します。サーバーがビジー状態の場合、サーバーは自動的にさらに子を作成します。
########################
Nginx 502 Bad Gateway は、要求された PHP-CGI が実行されたものの、何らかの理由 (通常はリソースの読み取り)が完了せず、PHP-CGI プロセスが終了します
一般的に、Nginx 502 Bad Gateway は php-fpm.conf の設定に関連しています。
php-fpm.conf には 2 つの重要なパラメータがあります。1 つは max_children で、もう 1 つは request_terminate_timeout ですが、この値は普遍的ではないため、自分で計算する必要があります。
502 問題は、通常、デフォルトの php-cgi プロセスが 5 であるために発生します。phpcgi プロセスが不足していることが原因である可能性があります。/usr/local/php/etc/php-fpm を変更する必要があります。 max_children 値は適切に増加します。
計算方法は次のとおりです:
サーバーのパフォーマンスが十分に高く、ブロードバンド リソースが十分で、PHP スクリプトに無限ループやバグがない場合は、request_terminate_timeout を直接 0s に設定できます。 0 の意味は、PHP-CGI を時間制限なく実行し続けることを意味します。これができない場合、つまり、PHP-CGI にバグがある可能性がある場合、帯域幅が十分でない場合、またはその他の理由で PHP-CGI がフリーズする場合は、次のことを推奨します。 request_terminate_timeout の値。この値はサーバーのパフォーマンスに応じて設定できます。一般に、パフォーマンスが優れているほど、20 分から 30 分の範囲で高く設定できます。
そして、max_children の値はどのように計算されるのでしょうか?原則として、値が大きいほど、php-cgi プロセスが速く処理され、キューに入れられるリクエストが少なくなります。 max_children の設定もサーバーのパフォーマンスに応じて設定する必要があります。通常、サーバー上の各 php-cgi が消費するメモリは約 20M です。
公式の回答に従って、関連する可能性を確認し、ネチズンからの回答と組み合わせて、次の解決策を考え出しました。
1. php fastcgi のプロセス数を確認します (max_children の値)
コード: netstat -anpo | grep "php-cgi" wc -l
5 (5 が表示されている場合)
2.
コード: top
fastcgi プロセスの数を観察します。使用されているプロセスの数が 5 以上の場合は、増やす必要があることを意味します (マシンの実際の状況に応じて)
3. /usr/local/php/etc/php-fpm.conf 関連設定
request_terminate_timeoutの実行時間は60秒、つまり1分です。
##############################################
ウェブサイト動作環境はNginx +php fastcgiモードです。ここ数日動作が不安定で、常にエラーが発生し、502エラーが報告されています。
今日、元同僚にアドバイスを求めたところ、php-fpm ログを確認するように言われました。そこには多くの有益な情報が記録されています。
そこで確認してみると、確かにたくさんのエラー メッセージがあることがわかりました:
Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200
もしそうならnginx.conf :worker_rlimit_nofile 65500; 不整合をチェックし、サービスを設定して再起動する必要があります
Mar 01 14:39:15.881047 [通知] fpm_children_make()、行 352: child 12364 (プールのデフォルト) が開始されました
Mar 01 14:39: 21.715825 [通知] fpm_got_signal() 、行 48: SIGCHLD を受信しました
Mar 01 14:39:21.715899 [通知] fpm_children_bury()、行 215: 子 11947 (プールのデフォルト) は開始から 175.443305 秒後にコード 0 で終了しました
一部エラー メッセージの説明は簡単です。情報をオンラインで直接確認してください。
検索後、最終的に次の最適化戦略をまとめました:
1. サーバーのファイル ハンドルを増やして開きます
# vi /etc/security/limits.conf plus
* ソフト nofile 65500
* ハード nofile 65500
2. nginx の開いているプロセス ファイルの数を増やします
nginx.conf: worker_rlimit_nofile 65500;
3. php-fpm.conf ファイルを変更する必要があります。主な変更は 2 つあります。
コマンド ulimit -n を使用して、開いているファイルの制限された数を確認します。php-fpm.conf のオプション rlimit_files がこの値と一致していることを確認します。
4,
# vi /etc/sysctl.conf
に
を追加します一番下の fs.file-max=65500
上記の変更後、PHP を再起動します。 /usr/local/webserver/php/sbin/php-fpm restart
ulimit -n が有効かどうかを確認します。そうでない場合はサーバーを再起動するか、/etc/sysctl.conf と /etc/security/limits.conf の設定が有効になります。
今のところ上記のエラーメッセージはまだ出ていません。すべてがうまくいきます。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
