2012-03-17 8 views
0

サーバプロセスの8つのCPUコアすべてがApacheプロセスのためにほぼ100%の負荷になることがあります。 MySQLを除く高負荷プロセス)。サーバのCPU負荷を積み上げている間、実行中のPHPプロセスが滞っていく時間

Apacheの再起動は常に動作しますが、通常は数時間だけですが、1週間前であっても動作します。目に見えるパターンはありません。全体的な負荷は約10になりますが、マシンはまだ非常に迅速に応答しています(通常、1日から4日または6日の天井に浮かびます、昼間によって異なります)。しかし、これらの絶え間ないスパイクと、訪問またはcronジョブによって引き起こされる実際のサーバーストレスとは関連していません。それはかなりランダムなので、私の最高の推測は、何度も何度も何度も何度も何度も何度も何度も何度も何度も繰り返していたPHPスクリプトです。

CPUが発熱して寿命が短くなり、このPHPプロセスでどれくらいのリソースが費やされているのか分からない人は、わかりません。

すべてのPHPプロセスはApacheプロセスでラップされているため、UNIXプロセスリストで現在実行されているPHPスクリプトを実際に見ることはできません。特定のスクリプトを指す別の方法がありますか? PHPスクリプトの中に何らかのトラッキングコードを実装する以外にも、私はウェブホスティングを実行していませんが、複数のサイトがあります。ウェブサーバー全体に広がったこのようなコードでトラッキングコードを実装する方法がわかりません。

したがって、私は純粋なunixソリューション(Debian)を探しています。最悪の場合、それはPHPクラスとcontollersの数十を含むPHPスクリプトに私を指摘します。最良の場合、それは単純なスクリプトになります。いずれにせよ、それはスタートです。おもう。

+0

どのmpmを使用しますか? – Rufinus

+1

まず、apacheのmod_server_statusを有効にすると、どのリクエストがリソースを枯渇させているのかを知ることができます。 http://httpd.apache.org/docs/2.0/mod/mod_status.htmlまた、 'strace -p'を使って100%CPUプロセスに接続し、どのシステムコールがそれを作っているのか見ることができます。それはあなたにヒントを与えるかもしれません。 –

+0

私はプリフークを使用しています – Saix

答えて

0

プロセスリストにPHPプロセスが表示されない場合がありますが、このPHP関数でPIDを取得することができます:getmypid(); XXXX xxxxはPIDである

トップ-p:あなたは、上記の関数によって返された値を取得し、その後、ターミナルを開き、「上部」コマンドを使用するのDebianを使用している場合は

「getmypid();」によって返されます。

+2

top -p xxxxは単にプロセスリストをフィルタリングします。 PHPのプロセスがApacheの優れたプロセスに包まれていることを示していません。 getmypid()は実際のPHPプロセスIDを表示することができますが、私はそれを呼び出す必要があるPHPスクリプトを知っていれば、私はそれを必要としません。 – Saix

関連する問題