使用 PHP 获取 Linux 系统 CPU 负载

最近使用 PHP 做了一个服务器负载监控的小东西,在服务器上使用 Workerman 开一个 WebSocket 服务,然后在浏览器中连接到服务。服务每隔 10 秒读取一次主机的相关信息,然后发送给客户端,客户端进行图形化显示。

总体的思路就是使用 PHP 调用 shell 命令,然后解析命令的输出内容。在获取 CPU 负载的时候,遇到了一些小问题。直观来说,直接使用

命令就可以获取 CPU 负载,但是实际上,

命令第一行输出的从主机启动以来的平均 CPU 负载,并不是当前的负载。

命令还有一些参数,比如可以增加一个延迟参数

:

,表示每秒输出一次数据,直到用户终止命令:

第一行数据是平均负载,从第二行数据开始,是当前的负载情况。作为监控来讲,肯定更加关注当前的负载情况。
那么,使用 PHP 调用

,当然不能使用延迟的方式来等待后续行的输出。

查了一些文档,发现在 Linux 上,系统负载的情况在

这个文件中,这个文件中的内容比较多,所以我们换一个思路,采用

的方式直接输出内容:

可以看到,这里面包含很多和 CPU 相关的数据,实际上这个数据的来源就是

文件。那么我们关心这么几项数据:

通过

找到关于

文件的说明,我们关心的是 CPU 相关数据的说明:

大概的意思就是说,这些数值都是以 USER_HZ 为单位的。不管什么单位,总之他们的单位是一致的,那么我们就可以通过 2 次

命令的输出来计算每个项上的增量,然后 4 个项上的增量相加就是总体的增量(其实后面还有更多关于 CPU 的数据,我们先忽略掉),然后计算每个项上的增量和总体增量的比,就是在这两次采样之间 CPU 在用户、系统和闲置状态下的负载。

参考代码如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注