パブリックアカウントのファンデータを同期してバッチプッシュするときに、サーバーがエラー502を報告しますエラーメッセージによると、バックエンドの問題であると判断できます。502 エラーの原因はさまざまですが、一般的にはサーバーが処理できないことが原因です。 1.まずサーバーログを確認する nginxプロセスによって処理される接続数が十分ではなく、単一のプロセスによって処理される接続数がnginx.confで設定されたworker_connections値を超えていることが判明しました。 通常、worker_connections の値は、単一のプロセスによって開かれる接続の最大数を参照できます。コマンドは次のとおりです: ulimit -n nginxを再起動します。nginx -s reload 現在の TCP 接続ステータスを表示します。netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}' 2) php-fpm ログを確認します。ログの場所がわからない場合は、php-fpm.conf から確認できます。php7 以降の設定ファイルは、php-fpm.d ディレクトリの下の www.conf ディレクトリに配置されていることに注意してください。 php-fpm.log を表示 pm.max_children が十分ではないことが分かりました。これは、php-fpm プロセスの最大数が小さすぎることを示しています。php 設定ファイル ww.conf を確認し、パラメータ pm.max_children=100 を変更します。 php-fpmは主にいくつかのパラメータを調整します pm.max_children: 静的モードで開かれる php-fpm プロセスの数 pm.max_requests: php-fpm 子プロセスが処理できるリクエストの最大数 pm.start_servers: 動的モードで開始される php-fpm プロセスの数 pm.min_spare_servers: 動的モードでの php-fpm プロセスの最小数 pm.max_spare_servers: 動的モードでの php-fpm プロセスの最大数 1. pm.max_children と pm.max_spare_servers の適切な値は何ですか?原則として、この値が大きいほど良いです。php-cgi プロセスが多いほど、処理が速くなり、キューに入れられるリクエストが少なくなります。 「max_children」の設定も、サーバーのパフォーマンスに応じて設定する必要があります。 メモリ/30Mで数値を取得することもできます。例えばメモリが8GBの場合は100に設定できるので、php-fpmが消費するメモリを2G~3G程度に抑えることができます。 256M メモリの VPS などメモリの少ないサーバーの場合、20M のメモリ容量で計算しても、10 個の php-cgi プロセスで 200M のメモリを消費するため、システムがクラッシュするのは正常です。 したがって、php-fpm プロセスの数を制御し、他のアプリケーションによって占有されているメモリを大まかに把握する必要があります。 pm.start_servers のデフォルト値の計算式は、min_spare_servers + (max_spare_servers - min_spare_servers) / 2 です。 たとえば、512M の VPS があり、php-fpm に最大 250M を割り当てる場合は、pm.max_spare_servers を 250/30、つまり約 8 に設定することをお勧めします。 pm.min_spare_servers については、サーバーの負荷に応じて設定することをお勧めします。たとえば、サーバーに PHP 環境のみが展開されている場合、より適切な値は 2 〜 5 です。 ここで別の問題があります。php-fpm は、一部のサードパーティ ライブラリが原因でメモリ リークを引き起こす可能性があります。時間が経つにつれて、メモリを多く占有するようになります。たとえば、当社のサーバーは現在約 50m を占有しています。幸い、pm.max_requests パラメータがあり、このパラメータは、プロセスを再起動する前に php-fpm 子プロセスが実行される回数を指定します。実際の状況に応じて調整する必要があるかもしれません。 計算は次のようになります。 一般的に言えば、通常の状況では、サーバー上の各 PHP-CGI によって消費されるメモリは約 20M ~ 30M なので、私は "max_children" を 40、つまり 20M*40=800M に設定しました。つまり、ピーク時には、すべての PHP-CGI によって消費されるメモリは 800M 以内となり、有効メモリの 2Gb よりも低くなります。 「max_children」が 5 ~ 10 などの小さい値に設定されている場合、php-cgi は「非常に疲れた」状態になり、処理速度が非常に遅くなり、待機時間が長くなり、CPU 使用率が高くなります。 リクエストが長時間処理されない場合、504 Gateway Time-out エラーが表示され、処理中の php-cgi に問題が発生すると、502 Bad gateway エラーが表示されます。 max_childrenを設定する最良の方法は、req/sに基づくことです。 (スループット、単位時間あたりにサーバーが処理するリクエストの最大数、単位req/s)を設定する。 プログラムの処理能力が 100 リクエスト/秒の場合、100 に設定するのが適切です。これは動的に調整されます。 2. 適切な request_terminate_timeout 値は何ですか?計算は次のようになります。 サーバーのパフォーマンスが十分に良好で、帯域幅リソースが十分であり、PHP スクリプトにループやバグがない場合は、「request_terminate_timeout」を直接 0 秒に設定できます。 0s は、PHP-CGI が時間制限なしで実行し続けることを意味します。 これができない場合、つまり、PHP-CGI にバグがあるか、帯域幅が十分でないか、その他の理由で PHP-CGI がハングしている場合は、サーバーのパフォーマンスに応じて設定できる「request_terminate_timeout」に値を割り当てることをお勧めします。 一般的に、パフォーマンスが良ければ高いほど、設定できる時間は長くなりますが、20 分から 30 分程度で十分です。私のサーバーの PHP スクリプトは長時間実行する必要があり、一部は 10 分を超える可能性があるため、900 秒に設定しました。これにより、PHP-CGI が停止して 502 Bad gateway エラーが発生することはありません。 最適化されたパラメータ/usr/local/php/etc/php-fpm.d/www.conf を編集します。 リクエスト終了タイムアウト=1200 サービスのプロセスIDを調べる nginx の 502 エラーの原因をまとめます2. プロキシ バッファが小さすぎます。nginx リバース プロキシを使用している場合、ヘッダーが大きすぎてデフォルトの 1k を超えると、上記のアップストリームが大きすぎるヘッダーを送信します (簡単に言うと、nginx は外部リクエストをバックエンドに送信して処理しますが、バックエンドから返されるヘッダーが大きすぎて nginx が処理できず、502 が発生します)。 サーバー{ 聞く 80; サーバー名 *.lxy.me; 位置 / { 次の3行を追加します 3. php-cgi プロセスのデフォルトの数が少なすぎるため、インストール時および使用時に 502 の問題が発生する可能性があります。通常、これは php-cgi プロセスのデフォルトの数が 5 であるためです。502 は、phpcgi プロセスが不足していることが原因である可能性があります。/usr/local/php/etc/php-fpm.conf を変更し、max_children 値を適切に増やす必要があります。 max_requests 値が十分でない可能性もあります。これら 2 つの設定項目は大量のメモリを消費するので、サーバーの構成に応じて設定してください。そうしないと逆の効果が出る可能性があります。 4. PHP実行タイムアウト 5. Nginxの待機時間タイムアウトPHPプログラムによっては、実行時間がNginxの待機時間を超えてしまうことがあります。nginx.conf設定ファイルでFastCGIのタイムアウト時間を適切に増やすことができます。 http { 6. パブリックアカウントで作業している場合は、WeChat サーバーから自分のサーバーへのリクエストが多すぎることが原因である可能性があることに注意してください。php-fpm プロセスの数が最大プロセス数に達した場合は、php-fpm 構成ファイルを確認すると、エラー メッセージが表示されます。 nginx サーバー例外 502 不正ゲートウェイの原因のトラブルシューティングに関するこの記事はこれで終わりです。nginx サーバー例外 502 不正ゲートウェイに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Web データ ストレージ: Cookie、UserData、SessionStorage、WebSqlDatabase
>>: MySQL 起動エラーを解決する: エラー 2003 (HY000): 'localhost' の MySQL サーバーに接続できません (10061)
1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...
1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...
序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...
以下では、よく使われるヘッド構造と、各タグや要素の意味や使用シーンを紹介します(この記事は、Yisi...
重要なデータはバックアップする必要があり、リアルタイムでバックアップする必要があります。そうしないと...
目次ミューテーションオブザーバーAPI特徴インターセクションオブザーバーAPI例えば画像の遅延読み込...
DOCTYPE が次のとおりである場合:コードをコピーコードは次のとおりです。 <!DOCTY...
Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...
グリッドシステムの形成1692年、新しく即位したフランス国王ルイ14世は、フランスの印刷技術のレベル...
結果: 実装コード: スワイパーコンポーネントと一緒に使用する必要がありますSwiper 基本デモア...
ウェブサイトにとって、これは最も基本的な機能です。それでは、登録プロセスに含まれる手順を見てみましょ...
HOCを紹介する一文高階コンポーネント (HOC) とは何ですか? 公式ドキュメントによると、「高階...
1.まずAlibaba Cloudのウェブサイトにログインしてアカウントを登録し、サーバータイプを...
1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...
1. haslayout と bfc は IE 固有の標準属性です。 2. BFC はページ上の分離...