How to get CPU usage and RAM usage without exec?

前端 未结 5 2047
日久生厌
日久生厌 2020-11-28 05:19

How does VBulletin get the system information without the use of exec? Is there any other information I can get about the server without exec? I am interested i

相关标签:
5条回答
  • 2020-11-28 05:26

    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);
    print_r($cpu);
    
    0 讨论(0)
  • 2020-11-28 05:41

    This is what I use on Linux servers. It still uses exec, but other questions point here as duplicate, and there is no [good] suggestion for those. It should work on every distro, but if it doesn't, try messing with $get_cores + 1 offset.

    CPU in percent of cores used (5 min avg):

    $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 in percent of total used (realtime):

    $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) . '%';
    

    RAM in GB used (realtime):

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

    Here is what's in the $get_mem array if you need to calc other facets:

    [0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached
    

    Bonus, here is how to get the uptime:

    $exec_uptime = preg_split("/[\s]+/", trim(shell_exec('uptime')));
    $uptime = $exec_uptime[2] . ' Days';
    
    0 讨论(0)
  • 2020-11-28 05:45
    <?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());
    
    0 讨论(0)
  • 2020-11-28 05:49

    This is what I use for instant CPU usage without 1 second delay

    $cpu = shell_exec('top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk \'{print 100 - $1}\'');
    
    0 讨论(0)
  • 2020-11-28 05:50

    Use PHPSysInfo library

    phpSysInfo is a open source PHP script that displays information about the host being accessed. It will displays things like:

    • Uptime
    • CPU
    • Memory
    • SCSI, IDE, PCI
    • Ethernet
    • Floppy
    • Video Information

    It directly parsed parses /proc and does not use exec.


    Another way is to use Linfo. It is a very fast cross-platform php script that describes the host server in extreme detail, giving information such as ram usage, disk space, raid arrays, hardware, network cards, kernel, os, samba/cups/truecrypt status, temps, disks, and much more.

    0 讨论(0)
提交回复
热议问题