Get cpu percent usage in php

前端 未结 5 1367
生来不讨喜
生来不讨喜 2020-12-16 17:01

I want to show percent CPU usage in PHP. Is not important if get values by cron in shell > output to file > parse in PHP or directly get value in php. I try many solutions f

相关标签:
5条回答
  • 2020-12-16 17:36

    I'm not 100% sure on what you're asking, but if I'm right, this answer might help you:

    <?php
        exec('ps -aux', $processes);
        foreach($processes as $process)
        {
            $cols = split(' ', ereg_replace(' +', ' ', $process));
            if (strpos($cols[2], '.') > -1)
            {
                $cpuUsage += floatval($cols[2]);
            }
        }
        print($cpuUsage);
    ?>
    

    The code provided was an answer from Devils Child for a similar question: https://stackoverflow.com/a/9846219/904242

    0 讨论(0)
  • 2020-12-16 17:43

    after searching on forums and trying many methods, best accurate is this:

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

    now stats are in $cpu['user'], $cpu['nice'], $cpu['sys'], $cpu['idle']

    0 讨论(0)
  • 2020-12-16 17:53

    you can use "top -n 1" for getting cpu percentage. this command runs top only once, then gives output. i think you can do the parsing part on your own.

    0 讨论(0)
  • The answer by Diyism as well as the suggestion on http://php.net/manual/en/function.sys-getloadavg.php didn't seem to work on CentOS 6.5 VPS. We had to change physical id to processor. Then it returns one core as ID 0 so the calculation needs +1 cores. Also, you need to multiply by 100 to get a percentile. Finally, that needs to be rounded for a nice looking percent. So here is an alternate thought that may work if you run into any of that:

    <?php
    $loads = sys_getloadavg();
    $core_nums = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
    $load = round($loads[0]/($core_nums + 1)*100, 2);
    echo $load;
    ?>
    

    So if load avg [0] was 0.50 on 2 core machine this would display a CPU load of 25%

    0 讨论(0)
  • 2020-12-16 18:01

    Use this:

    <?php
    $loads=sys_getloadavg();
    $core_nums=trim(shell_exec("grep -P '^physical id' /proc/cpuinfo|wc -l"));
    $load=$loads[0]/$core_nums;
    echo $load;
    ?>
    
    0 讨论(0)
提交回复
热议问题