web-dev-qa-db-ja.com

CPU使用率とRAM execなしの使用率を取得するには?

VBulletinはどのようにしてexecを使用せずにシステム情報を取得しますか? execなしでサーバーについて取得できる他の情報はありますか?私は、に興味を持っています:

  • 使用帯域幅
  • システムタイプ
  • CPU速度/使用率/カウント
  • RAM使用量
29
Ronan Dejhero

PHPSysInfoライブラリを使用

phpSysInfoは、オープンソースPHPアクセスされるホストに関する情報を表示するスクリプトです。次のようなものが表示されます。

  • 稼働時間
  • CPU
  • 記憶
  • SCSI、IDE、PCI
  • イーサネット
  • フロッピー
  • ビデオ情報

直接解析解析/procおよびexecは使用しません。


別の方法は、 Linfoを使用することです。非常に高速なクロスプラットフォームphpスクリプトであり、ホストサーバーを非常に詳細に記述し、RAM使用量、ディスク容量、RAIDアレイなどの情報を提供します。ハードウェア、ネットワークカード、カーネル、OS、Samba/cups/truecryptステータス、temps、ディスクなど。

44
shamittomar

これは、Linuxサーバーで使用するものです。まだexecを使用していますが、ここでは他の質問が重複していることを示しており、それらに対する[良い]提案はありません。 shouldすべてのディストリビューションで動作しますが、動作しない場合は、$get_cores + 1オフセットをいじってみてください。

使用コアのCPUパーセント(平均5分):

$exec_loads = sys_getloadavg();
$exec_cores = trim(Shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
$cpu = round($exec_loads[1]/($exec_cores + 1)*100, 0) . '%';

合計使用率(リアルタイム)のRAM:

$exec_free = explode("\n", trim(Shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = round($get_mem[2]/$get_mem[1]*100, 0) . '%';

GB単位のRAM(リアルタイム):

$exec_free = explode("\n", trim(Shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = number_format(round($get_mem[2]/1024/1024, 2), 2) . '/' . number_format(round($get_mem[1]/1024/1024, 2), 2);

他のファセットを計算する必要がある場合の$get_mem配列の内容は次のとおりです。

[0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached

ボーナス、稼働時間を取得する方法は次のとおりです。

$exec_uptime = preg_split("/[\s]+/", trim(Shell_exec('uptime')));
$uptime = $exec_uptime[2] . ' Days';
5
dhaupin
<?php
function get_server_load() 
{
    $load=array();
    if (stristr(PHP_OS, 'win')) 
    {
        $wmi = new COM("Winmgmts://");
        $server = $wmi->execquery("SELECT LoadPercentage FROM Win32_Processor");  
        $cpu_num = 0;
        $load_total = 0;
        foreach($server as $cpu)
        {
            $cpu_num++;
            $load_total += $cpu->loadpercentage;
        }

        $load[]= round($load_total/$cpu_num);

    } 
    else
    {
        $load = sys_getloadavg();
    }
    return $load;
}
echo implode(' ',get_server_load());
3
Stergios Zg.

フォーラムで検索して多くの方法を試した後、これが最も正確です:

$stat1 = file('/proc/stat'); 
sleep(1); 
$stat2 = file('/proc/stat'); 
$info1 = explode(" ", preg_replace("!cpu +!", "", $stat1[0])); 
$info2 = explode(" ", preg_replace("!cpu +!", "", $stat2[0])); 
$dif = array(); 
$dif['user'] = $info2[0] - $info1[0]; 
$dif['Nice'] = $info2[1] - $info1[1]; 
$dif['sys'] = $info2[2] - $info1[2]; 
$dif['idle'] = $info2[3] - $info1[3]; 
$total = array_sum($dif); 
$cpu = array(); 
foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 1);
print_r($cpu);
0
Vishnu T Asok