Apache/php4サーバーでPHP/MySQLスクリプトを実行しています(php4は、新しいサーバーの準備が整うまでは一時的なものです...)、奇妙な動作に気づきました。
いくつかのphpといくつかの単純なmysqlクエリを使用するリクエストは、通常、非常に高速です。しかし、同じリクエストをサーバーに10回(次々に、重い負荷はまったくかけずに)送信すると、おそらく8〜9回、50ミリ秒以内に終了します。ただし、1つまたは2つのリクエストにはそれぞれ5秒以上かかります。間には何もありません。わずか50ミリ秒または数秒です。
それは非常にランダムに見え(最初のリクエストは遅く、次のリクエストは速いなど)、理由がわかりません。
誰かがこの問題を引き起こす可能性のあるものとそれを修正する方法を知っていますか?
簡単な説明だけでサーバーのパフォーマンスが低下する原因を正確に特定することは困難です。速度低下の原因をターゲットにするために、ベンチマークを実行する必要があります。例えば...
これはApacheの構成である可能性があります(最大クライアントを本当に低い数に設定できます-ただし、これは疑わしいです)。試してください Apacheベンチマーク(ab)
構築が不十分なMySQLクエリが原因でテーブルロックが発生したり(アクセスした各テーブルのストレージエンジンによって異なります)、MySQL接続制限が非常に低い可能性があります(チェック this )
PHPスクリプトが非常に強力であり、サーバーにそのレベルのアクティビティをサポートするハードウェアがない可能性があります。
編集: munin を見てください。これにより、サーバーパフォーマンスの包括的な概要がわかり、リクエストを行うときに監視します。
それはすべて非常に主観的です。たぶん、他の誰かが他の潜在的な問題を指摘する可能性があります。
他の人が指摘しているように、問題を特定するのは難しい場合があります。ただし、スクリプトの実行をチェックすることはできます。問題がPHPに表示される場合は、PHPまたはデータベースの間にある可能性があります。
次のようなことを行うことで、スクリプトで実行チェックを行うことができます。
function checkpoint(){
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
return $mtime;
}
function measureGaps($data){
$size = count($data);
for($i=0; $i < $size - 1; $i++){
$p = $i+1;
$gap[]= $data[$p] - $data[$i];
}
return $gap;
}
各チェックポイントで、次のことができます。
$checkpointArray[] = checkpoint();
スクリプトの最後で、他の関数を呼び出します。
var_dump(measureGaps($checkpointArray));
Var_dumpを実行したくない場合は、出力を変更してファイルに書き込みます。