如何获得CPU使用率和内存使用情况没有exec?

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

  • 使用的带宽
  • 系统types
  • CPU速度/使用率/计数
  • RAM使用情况

使用PHPSysInfo

phpSysInfo是一个开源PHP脚本,显示关于被访问的主机的信息。 它会显示如下内容:

  • 正常运行时间
  • 中央处理器
  • 记忆
  • SCSI,IDE,PCI
  • 以太networking
  • 软盘
  • video信息

它直接parsingparse /proc ,不使用exec


另一种方法是使用Linfo 。 这是一个非常快速的跨平台的 PHP脚本,详细描述主机服务器,给出的信息,如RAM的使用情况,磁盘空间,RAIDarrays,硬件,网卡,内核,操作系统,桑巴/杯/ truecrypt状态,临时工,磁盘等等。

这是我在Linux服务器上使用的。 它仍然使用exec ,但其他问题在这里指的是重复的,对于那些没有任何好的build议。 它应该适用于每个发行版,但是如果不发行,请尝试使用$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'; 
 <?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()); 

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

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