如何获得CPU和内存使用量

时间:2011-09-24 09:52:55

标签: php cron cpu-usage

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

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

看看这个图书馆http://phpsysinfo.sourceforge.net/

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

编辑:这取自斯蒂芬的评论。我把它放在这里只是为了让人们有足够的曝光度来阅读。

  

请注意:这个库不是太爽口了。我找不到办法   只返回CPU或只是ram,它返回一切,硬件列表,   网络统计数据,高清用法,操作系统信息,几乎所有你能想到的东西   的。这需要大约4秒才能完成,所以它可能不是   如果你想使用ajax或不断更新值,最好的选择   某种东西。

答案 2 :(得分:2)

How to get Memory and CPU usage in PHP

完美的简单例子。

- procntage中的内存%($ mem [2] / 1000表示已用内存,以MB为单位)

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];

}

答案 3 :(得分:1)

我最近有一些问题需要加载CPU,我觉得要分享它。

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

我的情况:

我使用Zend Framework 1.2来构建监控应用程序,我希望得到cpu加载并在页面上显示它。在做了一些研究之后我发现我可以使用COM对象并用wmi查询Win OS,所以我将这些代码放到我的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.');
    }
  • 你可以在任何你想要的地方使用它,我已经在Zend结构的init函数中使用它。

我添加了一个Action和一个函数来使用该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文件编写它。

希望有所帮助。