你如何计算PHP中的服务器负载?

Kyl*_*yle 4 php server-load

你如何计算PHP/apache的服务器负载?我知道在vBulletin论坛中显示的是服务器负载,0.03 0.01 0.04但对于一般的乔来说这是不可理解的.所以我想到了1-100百分位的规模.我想显示一个从DIV读取的服务器加载视觉:

$load = $serverLoad*100;
<div class=\"serverLoad\">
    <div style=\"width: $load%;\"></div>//show visual for server load on a 1-100 % scale
</div>
<p>Current server load is $load%</p>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何检测服务器负载.是否可以将此服务器负载转换为百分位数?我不知道从哪里开始.愿有人请帮帮我吗?

谢谢.

Khe*_*hez 14

我有一个非常古老的功能,仍然可以做到这一点:

function getServerLoad($windows = false){
    $os=strtolower(PHP_OS);
    if(strpos($os, 'win') === false){
        if(file_exists('/proc/loadavg')){
            $load = file_get_contents('/proc/loadavg');
            $load = explode(' ', $load, 1);
            $load = $load[0];
        }elseif(function_exists('shell_exec')){
            $load = explode(' ', `uptime`);
            $load = $load[count($load)-1];
        }else{
            return false;
        }

        if(function_exists('shell_exec'))
            $cpu_count = shell_exec('cat /proc/cpuinfo | grep processor | wc -l');        

        return array('load'=>$load, 'procs'=>$cpu_count);
    }elseif($windows){
        if(class_exists('COM')){
            $wmi=new COM('WinMgmts:\\\\.');
            $cpus=$wmi->InstancesOf('Win32_Processor');
            $load=0;
            $cpu_count=0;
            if(version_compare('4.50.0', PHP_VERSION) == 1){
                while($cpu = $cpus->Next()){
                    $load += $cpu->LoadPercentage;
                    $cpu_count++;
                }
            }else{
                foreach($cpus as $cpu){
                    $load += $cpu->LoadPercentage;
                    $cpu_count++;
                }
            }
            return array('load'=>$load, 'procs'=>$cpu_count);
        }
        return false;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这会返回处理器负载.您还可以使用memory_get_usagememory_get_peak_usage进行内存加载.

如果您无法根据此信息找到百分比...叹息,只需发布​​,我们将一起尝试.


小智 9

PHP中的这个函数可能会做到这一点:sys_getloadavg().

返回三个样本,分别表示过去1分钟,5分钟和15分钟内的平均系统负载(系统运行队列中的进程数).