如何获取CPU和内存的使用情况?


How can I get the CPU and Memory useage

我想知道php的内存和CPU使用情况,因为我使用cronejobs有时CPU过载,所以在这种情况下,我不想启动更多的进程,我只是想跳过这个cron

我认为更好的方法是获得平均负载,因为它不仅取决于CPU,还取决于硬盘速度。

这是一个文档:http://php.net/manual/en/function.sys-getloadavg.php

看看这个库http://phpsysinfo.sourceforge.net/

演示:http://phpsysinfo.sourceforge.net/phpsysinfo/index.php?disp=dynamic

编辑:这是从Stephen的评论中摘录的。我把它放在这里只是为了让人们有足够的空间阅读。

只是一个提示:这个库不是很时髦。我找不到办法只返回CPU或ram,它返回一切,硬件列表,网络统计,高清使用,操作系统信息,几乎所有你能想到的的。这需要大约4秒来完成,所以它可能不是如果您希望使用ajax或差不多吧。

如何获取PHP的内存和CPU使用率

完美的简单例子。

——内存百分比% ($mem[2]/1000)

function get_server_memory_usage(){
$free = shell_exec('free');
$free = (string)trim($free);
$free_arr = explode("'n", $free);
$mem = explode(" ", $free_arr[1]);
$mem = array_filter($mem);
$mem = array_merge($mem);
$memory_usage = $mem[2]/$mem[1]*100;
return $memory_usage;
}

——CPU百分比%

function get_server_cpu_usage(){
$load = sys_getloadavg();
return $load[0];
}

我最近有一些问题得到CPU负载,我想分享它。

这是我的解决方案,请帮助我:

我的情况:

我使用Zend框架1.2来构建监控应用程序,我想获得cpu负载并在页面上显示它。做了一些研究后,我发现我可以使用COM对象和查询winos与wmi,所以我把这些代码到我的init函数:

    /* Initialize action controller here */
    $this->wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2');
    if (!is_object($this->wmi)) {
        throw new GetInfoException('This needs access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.');
    }
  • 你可以在任何你想要的地方使用它,我在init函数中使用它,因为Zend结构。

我添加了一个动作和一个函数来使用wmi,并通过调用该函数随时获得cpu负载。

public function cpuloadAction()
{
    echo json_encode($this->getLoad());
    exit();
}
private function getLoad() {
    // Time?
    if (!empty($this->settings['timer']))
        $t = new LinfoTimerStart('Load Averages');
    $load = array();
    foreach ($this->wmi->ExecQuery("SELECT LoadPercentage FROM Win32_Processor") as $cpu) {
        $load[] = $cpu->LoadPercentage;
    }
    //return round(array_sum($load) / count($load), 2) . "%";
    return (int)round(array_sum($load) / count($load), 2);
}
    因为它是实时数据,我把这些代码放在一个函数中,否则你可以把它写在一个非面向对象的PHP文件中。

希望有帮助。