PHP获取服务器CPU负载有五种方法:一、sys_getloadavg()函数直接获取1/5/15分钟平均负载;二、读取/proc/loadavg文件解析;三、执行uptime等命令并正则提取;四、使用POSIX扩展的posix_getloadavg();五、通过/proc/stat两次采样计算瞬时CPU使用率。

如果您需要在PHP脚本中实时获取当前服务器的CPU负载信息,则可能是由于系统监控、资源调度或性能告警等场景需求。以下是获取服务器CPU负载信息的多种方法:
一、使用sys_getloadavg()函数
该函数直接调用系统底层的负载平均值接口,返回过去1分钟、5分钟、15分钟的平均负载值,适用于Linux/Unix系统,且无需额外扩展支持。
1、在PHP脚本中调用sys_getloadavg()函数,返回一个包含三个浮点数的数组。
2、检查函数返回值是否为false,若为false表示系统不支持该函数。
3、提取数组第一个元素即为1分钟平均负载:$load = sys_getloadavg()[0];
二、读取/proc/loadavg文件
Linux系统将实时负载信息以文本形式暴露在/proc/loadavg中,PHP可通过文件读取方式获取原始数据,兼容性高且不依赖函数支持。
1、使用file_get_contents('/proc/loadavg')读取该文件内容。
2、对返回字符串按空格分割,取索引0位置的值即为1分钟平均负载。
3、确保Web服务器进程具有读取/proc/loadavg的权限,否则会触发警告:Warning: file_get_contents(/proc/loadavg): failed to open stream
三、执行top或uptime命令并解析输出
通过shell_exec()或exec()调用系统命令获取负载信息,适用于无法访问/proc或sys_getloadavg()不可用的环境。
1、执行uptime命令,其末尾输出格式为load average: 0.12, 0.08, 0.05。
2、使用正则匹配提取三个负载值,例如preg_match('/load average: ([\d.]+), ([\d.]+), ([\d.]+)/', $output, $matches)。
3、注意启用disable_functions配置项可能禁用shell_exec,需确认PHP配置中未将其列入禁用列表:disable_functions = exec,passthru,shell_exec,system
四、使用POSIX扩展获取系统信息
POSIX扩展提供posix_getloadavg()函数(注意与sys_getloadavg()区分),其行为类似但部分旧版本PHP中存在命名差异或缺失。
1、检查扩展是否启用:extension_loaded('posix')返回true方可继续。
2、调用posix_getloadavg(),返回结果结构与sys_getloadavg()一致。
3、若函数不存在,可尝试别名调用或回退至/proc/loadavg方案:Fatal error: Uncaught Error: Call to undefined function posix_getloadavg()
五、通过/proc/stat计算瞬时CPU使用率
从/proc/stat中读取CPU时间戳数据,两次采样后计算差值,可得出近似瞬时CPU使用率,精度高于平均负载,但需自行实现差分逻辑。
1、读取/proc/stat首行以cpu 开头的行,字段依次为user、nice、system、idle、iowait、irq、softirq、steal、guest、guest_nice。
2、记录两次采样间的各字段增量,总时间为所有字段之和,空闲时间为idle与iowait之和。
3、计算使用率公式为:(total_time - idle_time) / total_time * 100,结果保留两位小数。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











