いくつかのサーバーはすべて Windows 2008 システムです
各サーバーの Apache の最大同時実行数は ThreadsPerChild 1000 に設定しました
最近、元のプログラムを最適化するために、マルチスレッドを記述する必要があります (php は Apache のマルチスレッドを使用します)実装) 長時間実行されるプログラムの場合、スレッド数は 50 です。
これらの長時間実行プログラムは、最大 1 時間実行されると一律に停止することがわかりました。原因を長い間調べた結果、プログラムが停止するときに「子プロセスが終了しました」というメッセージが表示されることがわかりました。 Apacheのエラーログにstatus 255 -- Restarting.」と表示されると、Apacheが自動的に再起動します。
そこで、各サーバーの Apache のエラー ログを確認したところ、サーバーの同時実行数が高くなるほど、Apache がより頻繁に再起動されることがわかりました。同時実行数が約 200 の 1 つのサーバーは、実際に数分ごとに再起動しました。
その後、1 つのスレッドを使用して長時間実行プログラムを実行しようとしましたが、1 日後に 50 スレッドに切り替えた後、1 時間以内に再び停止しました。
すでに混乱しています。Apache の設定は複数のポートと同時実行のみを設定しており、残りはオリジナルの設定です。見落としている重要な設定はありますか?
しばらくオンラインで検索しましたが、適切な解決策がありません。一緒に分析して議論しましょう
「子プロセスがステータス 255 で終了しました -- 再起動中です。」Apache が再起動する問題を解決するにはどうすればよいですか?
PHP がプログラムを長時間実行し、Apache が自動的に再起動した場合に自動的に回復する方法は?
httpd.conf ファイルをこのように変更すると、一般的なボトルネックは mysql にあると思います。それでもうまくいかない場合は、思い切って nginx に変更してください。私も少し前はそうでしたが、今は nginx を使っていてとても満足しています。
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 2000 MaxClients 1500 MaxRequestsPerChild 1000</IfModule>
子プロセスはステータス 255 で終了しました -- 再起動中です
子プロセスの終了ステータスは 255?? 再起動します
Windows の PHP はスレッドをサポートしません
fsockopen を通じてシミュレートすると、アクティブに開始された httpプロセス 。 Apache の場合、これはブラウザによって開始されるものと何ら変わりません
同時 http リクエストが Apache の事前設定された同時実行数を超えた場合、キューイングのみが発生しますが、クラッシュは発生しません
もちろん、同時実行数に応じてメモリが必要です保証されています。メモリ不足、クラッシュは当然です
さらに、http レスポンダーが長時間出力しない場合、Apache はハングします。これは Apache の問題ではなく、対応するプログラムの問題です
httpd.conf ファイルをこのように変更する場合、一般的なボトルネックは mysql にあると思います。それでもうまくいかない場合は、思い切って nginx に変更してください。私も少し前はそうでしたが、今は nginx を使っていてとても満足しています。
あなたが Windows システムを使用していることに気づきませんでした。おそらくモデレータが正しいでしょう。
子プロセスはステータス 255 で終了しました -- 再起動中です
子プロセスの終了ステータスは 255?? 再起動しています
Windows の PHP はスレッドをサポートしていません
fsockopen を通じてシミュレートする場合、それはアクティブに開始された http プロセスです。 Apache の場合、これはブラウザによって開始されるものと何ら変わりません
同時 http リクエストが Apache の事前設定された同時実行数を超えた場合、キューイングのみが発生しますが、クラッシュは発生しません
もちろん、同時実行数に応じてメモリが必要です保証されています。メモリ不足、クラッシュは当然です
さらに、http レスポンダーが長時間出力しない場合、Apache はハングします。これは Apache の問題ではなく、対応するプログラムの問題です
echo ' ';//一个空格ob_flush();flush();
あなたが Windows システムを実行していることに気づきませんでした。おそらくモデレータの言うことは正しいでしょう。
php は Linux 上で動作します。基本的には大きく変える必要はありません。対応するファイルの大文字と小文字に注意してください。
Windows 環境の場合は、fsockopen を使用して動作をシミュレートすることをお勧めします。
現時点では、Apache または nginx を使用し続けることができます。たとえ Win 上の問題が一時的に解決されたとしても、次のピットが待っています。また、それはあまりにも残酷です...
しかし、システムがますます大きくなるにつれて、ますます多くのトラブルが発生し、以前の経験不足によって残された隠れた危険の代償を払わなければならないことは事実です。
今日観察してみたら、かなり安定していることが分かり、やっと安心しました。
次に、最も単純なプログラムを使用して、同時実行中に Apache が再起動し続けるかどうかをテストしてみます。まず問題の特徴を明らかにしてから、プログラムの問題を解決するか、環境を変更するかを決定します。
確認すると、Apache の問題であるはずです。
Windowsのnginxには、1つのアクセスが完了しないと他のアクセスが実行できないという問題があり、実行に時間がかかるプログラムを書かなければなりません。
皆さんありがとうございます、先にスレッドを閉じさせていただきます。