[PHP-users 30266] Re: PHPプログラムとサーバー負荷の関係

Chikara Wakae wakae @ hottaweb.co.jp
2006年 9月 6日 (水) 15:47:18 JST


東志さん

> 単純にプログラムレベルの話しですが…
> o $test に代入する部分は、ループの外にすべき。
> o $send_logへの追加は非常にコストが高い。
>   ログが必要なら、ファイルに吐き出すようにする。
ご指摘ありがとうございます。$send_logに追加していたのは、
この後でまとめてfopenでログファイルを作って、
fwriteでそれに書き込む仕様になっていた為です。
この場合は、while文の中で直接fwriteで書くようにした 
方が良いのですか?


西村さん

> 一万回に一回sleep()を入れるとかしてみてはどうでしょうか。
> PHPの終了と同時にメールが全て送信されているわけではないので
> 全体の処理時間はあまり変わらないと思います。
なるほど。分かりました。処理時間はあまり気にならないので、
(むしろサーバーにこれだけ負荷がかかっているのが問題なので)
sleep()を入れてみます。ただ、プログラムの作動直後から
負荷が90%台なのでやはりプログラムが動いている限りは
他の動作が遅くなるのは回避できないのでしょうか...。

> どこかで非効率なことをやっている可能性もあるので
> コードのどの部分で負荷が高いのかをプロファイラで確認するのが確 
> 実ですね。
プロファイラーと言うのはPHP内部のデバッガーみたいなもので 
すか?
ではなくて、NTサーバー自体の機能なのでしょうか?


Setoさん

> CPUを使い切っているのがwhileの前なのかwhile中なのか
> 確認したほうが良いかもしれませんね。
whileの前のSQL文の実行ではそれほど時間がかかっていないので、
やはりwhile中かもしれません。それを調べるのに何か良い方法 
をご存知ですか?

> あと気になることは実際にメール送信してますか?
> もししてないなら送信先を一時的に全て自分に固定等して
> テストしてみると変化あるかもしれません。
> (Winでのメール送信について知らないので単なる予想ですけ 
> ど)
現時点では実際に送信は行っていません。送信先を自分に固定する、と
言うのはDBから取ってきた値を変数に代入するのではなく、
固定の値を入れてみろ、と言う事でしょうか?


皆さんのおかげで、ある程度問題解決の糸口が見えてきました。
ありがとうございます。





PHP-users メーリングリストの案内