PHPでロードアベレージを表示させる方法

Linuxサーバではサーバのロードアベレージ(負荷状態)を知るコマンドに『w』があります。
[参考記事] ログをリアルタイムに表示させて監視する方法
[参考記事] サーバの負荷や使用率などを見るコマンドの一覧
[参考記事] 負荷が高いときには503エラーを返す方法
[参考記事] HEADリクエストを排除してサーバ負荷を軽減させる
[参考記事] Cacti RRDToolを利用したサーバ監視ツール

CPUの負荷率を表示するコマンドで、CPUのコア数より数字が大きくなっていた時には処理待ちのタスクが発生している状態です。
(Core i7では8コア、Core i5では4コア)

$ w
17:35:37 up 1 day, 2:01, 0 users, load average: 0.03, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

このフォーマットには2種類あります。

load average: 0.03, 0.01, 0.00
load averages: 0.00, 0.00, 0.02

ロードアベレージを表示させるには次のようにします。

if(!empty($_SERVER["WINDIR"])){
  ob_start();
  system("w");
  $system_w = ob_get_clean();
  if(preg_match("/load\s+averages?:\s*([0-9]+\.[0-9]+),\s*([0-9]+\.[0-9]+),\s*([0-9]+\.[0-9]+)\s*$/im",$system_w,$match)){
    $load_averages = array();
    $load_averages[] = array("name"=>1,"value"=>$match[1]);
    $load_averages[] = array("name"=>5,"value"=>$match[2]);
    $load_averages[] = array("name"=>15,"value"=>$match[3]);

    echo '<table>';
    foreach($load_averages as $load_average){
      echo '<tr><td>'.$load_average["name"].'</td><td>'.$load_average["value"].'</td></tr>';
    }
    echo '</table>';
  }
  
}

Windowsにはこのコマンドはありません。
またwebサーバで表示させるときにはApacheの表示負荷がかかるので、正確な数字を知りたい時にはcronなどを利用して負荷のかからないようにしたほうがいいです。

PHP5.1.3からはsys_getloadavgという関数があります。
1、5、15分平均の3つの数字が配列に格納されたものが返ります。

$loads = sys_getloadavg();

関連記事

スポンサーリンク

改ページ直後の行にtext-indentプロパティが効いてしまう

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る