如何在没有exec的情况下获得CPU使用率和RAM使用率?

时间:2011-01-16 14:05:10

标签: php cpu-usage ram bandwidth system-information

VBulletin如何在不使用exec的情况下获取系统信息?在没有exec的情况下,我可以获得有关服务器的任何其他信息吗?我感兴趣的是:

  • 使用的带宽
  • 系统类型
  • CPU速度/使用量/计数
  • RAM使用

5 个答案:

答案 0 :(得分:44)

使用PHPSysInfo

phpSysInfo是一个开源PHP脚本,显示有关正在访问的主机的信息。它将显示如下内容:

  • 正常运行时间
  • CPU
  • 内存
  • SCSI,IDE,PCI
  • 以太网
  • 软盘
  • 视频信息

它直接解析了解析/proc并且不使用exec


另一种方法是使用Linfo 。它是一个非常快速的跨平台 php脚本,它极其详细地描述了主机服务器,提供了诸如ram使用,磁盘空间,raid数组,硬件,网卡,内核,操作系统,samba /等信息。 cups / truecrypt status,temps,disks等等。

答案 1 :(得分:5)

这是我在Linux服务器上使用的。它仍然使用exec,但其他问题在这里指出是重复的,并且没有[好]建议。 应该在每个发行版上工作,但如果没有,请尝试使用$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(实时):

$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';

答案 2 :(得分:3)

<?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 :(得分:2)

这是我用于即时CPU使用的时间,没有1秒的延迟

$cpu = shell_exec('top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk \'{print 100 - $1}\'');

答案 4 :(得分:0)

在论坛上搜索并尝试了很多方法后,最准确的是:

$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);