私は/ server-statusを使用してApacheプロセスを監視しています。起動すると、彼らは次のようになります。多くの長時間実行されているApacheプロセスは、一定時間が経過しても要求のないREAD状態にある
_____W_K__K____________C_K________C_____________W_..............
................................................................
................................................................
しかし、このような外観を実行しているの数時間後:
R_KCR___KR__RKRR_RRRKRRRRRRKRR_RRCK____R_RRRR_RRRKRRRKRRRRRRRRR_
R_RRRR_R.RR.R_R.R_R..CKRRRRW.K_RCRKRR_R_.._R._.RK_KRK_.RRR.KK_.R
..RR............................................................
長い時間と私ドンを取った、あまりにも多くの「読む」(R)のステータスがあります彼らには何の要求もないので、彼らは何をしているのか分からない。 (追加があることを言及Iは、上記の例からスキップ状態を、合計で私が利用可能な2000個の位置を持っている「」)プロセス一覧で私はこのような約40 『R』プロセス1:
Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
15-2 21291 0/37/11158 R 0.03 7468 2 0.0 1.93 198.35 82.78.95.105
このようなレポートのヘッダーを見て:4X3.6GHZ Xeonプロセッサ、2X512 GB SSD、32ギガバイトのメモリ、Debianの3.16.36-1は、Apache 2.4.10、PHP 5.6:
Server Version: Apache/2.4.10 (Debian) mod_fcgid/2.3.9 OpenSSL/1.0.1t
Server MPM: prefork
Server Built: Sep 15 2016 20:44:43
Current Time: Thursday, 12-Jan-2017 08:38:46 EET
Restart Time: Wednesday, 11-Jan-2017 00:51:18 EET
Parent Server Config. Generation: 3
Parent Server MPM Generation: 2
Server uptime: 1 day 7 hours 47 minutes 27 seconds
Server load: 0.34 0.35 0.39
Total accesses: 1599556 - Total Traffic: 29.9 GB
CPU Usage: u18.87 s6.81 cu0 cs0 - .0224% CPU load
14 requests/sec - 274.0 kB/second - 19.6 kB/request
90 requests currently being processed, 27 idle workers
は、私がプライベートサーバーを持っています。 29、mod_fcgid、php-fpm、php5-cgi、prefork。
私apache2.confの設定の一部:
Timeout 14400
KeepAlive On
MaxKeepAliveRequests 1000
KeepAliveTimeout 3
HostnameLookups Off
マイmpm_prefork.conf設定:
<IfModule mpm_prefork_module>
StartServers 50
MinSpareServers 25
MaxSpareServers 50
ServerLimit 2000
MaxRequestWorkers 2000
MaxConnectionsPerChild 1000
</IfModule>
私fcgid.confの設定の一部:
FcgidMaxRequestLen 1073741824
FcgidOutputBufferSize 1073741824
FcgidMaxProcesses 200
FcgidMaxProcessesPerClass 100
FcgidMinProcessesPerClass 0
FcgidProcessLifeTime 30
FcgidConnectTimeout 30
FcgidIOTimeout 14400
FcgidBusyTimeout 14400
FcgidIdleTimeout 3
FcgidIdleScanInterval 1
私が持っているいくつかのサーバーで長時間実行しているcronジョブを処理しているので、ApacheとPHPプロセスでこの「14400」(= 4時間)という大きなタイムアウトが必要です。
質問:
- 非常に多くの "R" のステータスが要求することなく、あるのはなぜ?
- 彼らは何をしていますか、どうやって調べることができますか?
- なぜそれほど長い時間がかかるのですか?
アップデート1:
Aは、これは私が私のcronジョブを実行することができますするための最小値である、(= 2時間)7200にタイムアウトを変更しました。しかし私は私のcronjobsに問題がなかった。
ApacheのもFcgidIOTimeout 7200
FcgidBusyTimeout 7200
:
PHP and mod_fcgid: ap_pass_brigade failed in handle_request_ipc functionに基づいてTimeout 7200
私はこれでした:数時間後
FcgidMaxRequestsPerProcess 500
:私はこれをしなかったmod_fcgid: ap_pass_brigade failed in handle_request functionに基づいて
FcgidOutputBufferSize 0
をサーバーが応答を停止:
サービスは利用できません:サーバーが一時的maintananceのダウンタイムや容量の問題にあなたの 要求をサービスすることができません。後で にもう一度お試しください。
[fcgid:warn] (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function [fcgid:warn] (32)Broken pipe: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
そして、この(多分、各要求のための)のようなの束:
[fcgid:warn] mod_fcgid: too much processes, please increase FCGID_MAX_APPLICATION
質問2:
私はこの2のようないくつかのerrosを発見したログに
- これらのエラーは何を意味していますか?どうすれば修正できますか?
- サーバーが応答しなくなるのはなぜですか?おそらくエラーのため...
- mod_fcgid、php-fpm、php5-cgi、preforkモジュールは完全に互換性があり有効ですか?これは、新しいサーバーを入手したときのデフォルト構成でした。
ここで重要なのはあなたのコメントです "私はサーバーに長時間走っているcronジョブを持っているので、これはApacheとPHPプロセスで14400(= 4時間)の大きなタイムアウトが必要な理由です。"それらを止めなさい、問題は持続するか。 lsofのようなコマンドは、それらの子のアクティブな接続を表示します。また、別の注意点として、mod_fcgidを持っていれば、preforkは必要なく、よりスケーラビリティの高いスレッドのようなmpmイベントに切り替えることができます。開いているスロットにはあなたのスペアサーバーディレクティブが反映されます。 OPTIONSリクエストはあなたのものからのもので、Apacheはそれ自体をpingしません。 –
いずれの場合も、タイムアウトを通常の値に減らすと、この動作は停止します。 –
あなたのPHPスクリプトは何らかの理由でmod_fcgidが、 "FCGID_MAX_APPLICATION"がソースと再コンパイル時に変更できる内部テーブルであるため、さらに多くのプロセスを生成できないため、そこにぶら下がっています。どのバージョンのmod_fcgidを使用していますか?もし最後でなければアップグレードするべきです。私のお勧めですか? mod_proxy_fcgi - > php-fpmに移行すると、mpm_eventでApacheを使用でき、php-fpmは非常に汎用性があり、非常に異なる独立した設定が可能です。 –