2012-06-28 9 views
7

私はVPSホスティングサービスで動作するカスタムスクリプトを持つウェブサイトを持っています。私は私が手に与えられたプロセスを行くとstraceとき CPU usage特定のプロセスを実行しているPHPスクリプトを追跡するには?

: すべてのスクリプトは、フレンドリーURLのために私のスクリプトで

何かショーとして、高いCPU使用率を生成しているのはmod_rewriteと.htaccessを使用してindex.phpを通って行きますこれはわかりません:

setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={90, 0}}, NULL) = 0 
    rt_sigaction(SIGPROF, {0x7a6b8f, [PROF], SA_RESTORER|SA_RESTART, 0x2af8ae8742f0}, {0x7a6b8f, [PROF], SA_RESTORER|SA_RESTART, 0x2af8ae8742f0}, 8) = 0 
    rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0 

これは無限ループで連続して繰り返されます。

私が知る必要があるのは、この問題を引き起こす正確なPHPスクリプトを追跡する方法です。助言がありますか?

+1

エラーログを有効にします。最大実行時間を設定します。スクリプトが誤っているエラーログを見てください。おそらくタイムアウトエラーが発生した場合にリクエストの詳細をダンプできる独自のエラーハンドラを作成して、リモートデバッガでこれを再現することができます。 – hakre

+0

あなたはどのAPIを使用していますか? CGI? – hakre

答えて

2

スクリプトでgetmypid()関数を使用します。これをログファイルなどに出力して、どのスクリプトがどのスクリプトであるかを確認してください。

EDIT: は自動的にすべてのファイルにこのスニペットを含めるように設定auto_prepend_fileの設定を使用します。

php_value auto_prepend_file append.php 
+0

問題は彼がそれがどのスクリプトであるのか分からない... – Josh

+0

もちろん彼はしません。私は彼が彼のスクリプトをデバッグすることによってこれを理解しようとしていると仮定しています。彼は自分のスクリプトを編集できないとは言わなかった。 OPが彼のスクリプトを編集して、それぞれのスクリプトが彼のトレースの取り組みを助けるために使用しているPIDをメモするよう提案しています。 – davidethell

+1

だから彼はそれをすべてのPHPファイルに追加することをお勧めしますか? OK。私はあなたが何を意味するかを見ていると思う。もし彼が各スクリプトに '__FILE__' *と*' getmypid() 'を記録するなら、これは有効な答えです。 – Josh

6

インストールあなたのPHPにthe PECL proctitle packageを得ることができる場合、あなたはindex.phpは、そのプロセスのタイトルを設定するためにそれを使用することができますそれを渡したスクリプトの名前に変換します。 (変更されたプロセスタイトルは、特定のプロセステーブルビジュアライザに表示される場合と表示されない場合がありますが、それ以外の場合はpsを使用してください)

+1

ああクール:D何か新しい毎日を学ぶ。 – Leigh

+0

これは素晴らしいトリックです!私はそれを覚えておく必要があります。 – Josh

+0

@chaosそれが私のホストで利用可能かどうか私はどのように知っていますか?もしそうでなければ、私はそれをどのようにインストールするのですか、それがインストールされていればどうすればいいですか? –

関連する問題