2009-03-10 4 views
8

多くのCPUとMysqlリソースを必要とするクリーンアップを実行するcronジョブを実行したい。私はそれがサーバーが比較的忙しくない場合にのみ実行する必要があります。PHPスクリプトは、サーバーがビジー状態かどうかをどのように伝えることができますか?

PHPからそれを判断する最も簡単な方法は何ですか? (例えば、最後に何回クエリが実行されたかを返すクエリがありますか?)

答えて

12
if (function_exists('sys_getloadavg')) { 
    $load = sys_getloadavg(); 
    if ($load[0] > 80) { 
     header('HTTP/1.1 503 Too busy, try again later'); 
     die('Server too busy. Please try again later.'); 
    } 
} 

あなたはおそらく、多くの人が眠っ対アクティブになっているかを確認するためにMysql List Processes機能でDBへの負荷についてのまともな指標を情報を使用することができます

+0

注:PHP 5.1.3以降でのみ動作し、Windowsでは動作しません。 –

+1

Thx、チャドバーチ。単にこれについて忘れてしまった:)勝つために重い負荷のプロダクションサーバーを見たことがない: – SMka

+0

@Chad PHP <5.1.3で私の答えのバージョンでsys_getloadavg()を置き換えることができます:split( ''、file_get_contents( '/ proc/loadavg ')) – vartec

3

これがuptimeの出力を解析します。これは一般的に "ビジー"の良い尺度と考えられるCPU負荷を示しています。 1.0の近くのものは「完全に忙しい」という意味です。

この出力には3つのCPU負荷時間があり、負荷平均値は1,5および15分を超えます。あなたのスクリプトに合ったものを選んでください。 「負荷」の定義is here

2

ニーズに、この機能を更新するようにしてください。

Linuxの場合は、Sys GetLoadAvg機能を使用してシステム全体の負荷を確認できます。

4

Linuxの場合、/proc/loadavgファイルから負荷を得ることができます。

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
関連する問題