高い同時実行性では、Apache が頻繁に再起動します
いくつかのサーバーは Windows2008 システムです
各サーバーの Apache の最大同時実行数は ThreadsPerChild 1000 に設定しました
最近、元のプログラムを最適化するには、次のことが必要です長時間実行されるマルチスレッド プログラムを作成します (PHP は Apache のマルチスレッドを利用して実装します)。スレッド数は 50 です。
これらの長時間実行プログラムは、最長 1 時間実行されると一律に停止することがわかりました。原因を探した結果、プログラムが停止するときに「子プロセス」というメッセージが表示されることがわかりました。 Apache のエラー ログにステータス 255 -- 再起動中です。」が表示され、Apache が自動的に再起動されます。
そこで、各サーバーの Apache のエラー ログを確認したところ、サーバーの同時実行数が高くなるほど、Apache がより頻繁に再起動されることがわかりました。同時実行数が約 200 の 1 つのサーバーは、実際に数分ごとに再起動しました。
その後、1 つのスレッドを使用して長時間実行プログラムを実行しようとしたところ、1 日後には問題がなかったことがわかり、50 スレッドに切り替えた後、1 時間以内に再び停止しました。
私はもう混乱しています。Apache の設定は複数のポートと同時実行数を設定するだけで、その他はすべてオリジナルの設定です。見落としている重要な設定はありますか?
しばらくオンラインで検索しましたが、適切な解決策がありませんでした。
「子プロセスがステータス 255 で終了しました -- 再起動中です。」Apache の再起動の問題を解決するにはどうすればよいですか?
php がプログラムを長時間実行し、Apache が自動的に再起動した場合に自動的に回復するにはどうすればよいですか?
-----解決策のアイデア----------------------
あなたはこのように httpd.conf ファイルを変更します。ボトルネックは一般に mysql にあると思います。それでもうまくいかない場合は、思い切って nginx に変更してください。私も少し前はそうでしたが、今は nginx を使っていてとても満足しています。
<br /><IfModule prefork.c><br /> StartServers 5<br /> MinSpareServers 5<br /> MaxSpareServers 10<br /> ServerLimit 2000<br /> MaxClients 1500<br /> MaxRequestsPerChild 1000<br /></IfModule><br />