多くの CPU と Mysql リソースを消費するクリーンアップを行う cron ジョブを実行したいと考えています。サーバーが比較的ビジーでない場合にのみ実行したい。
PHPからそれを判断する最も簡単な方法は何ですか? (たとえば、過去 1 分間に実行されたクエリの数を返すクエリはありますか? ...)
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.');
}
}
この機能をニーズに合わせて更新してみてください
これが Unix システムの場合は、 の出力を解析しますuptime
。これは、一般に「ビジー」の適切な尺度と見なされる CPU 負荷を示します。近くまたはそれ以上の1.0
ものは、「完全に忙しい」ことを意味します。
その出力には、1、5、および 15 分の負荷平均を示す 3 つの CPU "負荷" 時間があります。スクリプトに適したものを選択してください。「負荷」の定義はこちら。
Linux では、/proc/loadavg
ファイルから負荷を取得できます。
$load = split(' ',file_get_contents('/proc/loadavg'))
$loadAvg = $load[0]
おそらく、Mysql List Processes関数の情報を使用して、アクティブなプロセスとスリープしているプロセスの数を確認できます。これは、DB の負荷に関する適切な指標です。
Linux を使用している場合は、Sys GetLoadAvg関数を使用してシステム全体の負荷を確認できます。