点击上方蓝色字体关注我们
前言
用过牧云主机助手的师傅们应该都使用过“资源监控”的功能 ⬇️
其中有一个 CPU 使用率的指标,那么这个使用率是怎么计算的呢?
有关注到这个指标的师傅可能使用 top 或 htop 等命令能看到类似的数据:
那 top 和 htop 是怎么实现的呢?
今天就由牧云主机助手和大家一起探索一下 CPU 使用率的手动计算方式~
操作演示
0x01
首先我们来定义一下:使用率 =
(work_time - old_work_time) / (total_time - old_total_time)
那如何获取 linux 服务器CPU 的work_time 和 total_time 呢?
0x02
/proc/stat 文件第一行就是所有 CPU 的统计信息之和
一行有多个字段,分别是:
user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice
字段含义
1.user:用户态(user mode)的 CPU 时间,包括用户程序和用户态进程所消耗的 CPU 时间。
2.nice:优先级较低的用户态(user mode)的 CPU 时间。
3.system:内核态(system mode)的 CPU 时间,包括内核和内核态进程所消耗的 CPU 时间。
4.idle:空闲状态的 CPU 时间。
5.iowait:等待 I/O 操作完成的 CPU 时间。
6.irq:处理硬件中断的 CPU 时间。
7.softirq:处理软件中断的 CPU 时间。
8.steal:被虚拟化环境偷取的 CPU 时间。
9.guest:运行虚拟机的 CPU 时间。
10.guest_nice:优先级较低的运行虚拟机的 CPU 时间。
0x03
有了统计信息后,就可以计算出来 work_time 和 total_time 了:
work_time = user + nice + system + irq + softirq
total_time = work_time + idle + iowait + guest + guest_nice + steal
然后定期(比如 500ms)获取数据并代入公式
(work_time - old_work_time) / (total_time - old_total_time)
就能得到 CPU 的使用率了~
那内存的使用度是如何获取的呢?
0x04
/proc/meminfo 文件中包含了 Linux 服务器的内存统计信息
相对应的,总内存的大小就是 MemTotal,可用内存的大小就是 MemFree,可能可用内存(free+缓存)的大小就是 MemAvailable
牧云主机助手中资源监控中内存使用:
Used = MemTotal - MemAvailable
首期的技术分享到这里就结束了(抛砖),资源监控中的网络,磁盘统计数据是不是可以通过 procfs 获取到呢?以及 windows 又是怎样实现的呢?
没有使用牧云主机助手的师傅也欢迎点击“阅读原文”试用,扫码加入技术交流群第一时间获取更多产品动态~
点击下方在看,一起学技术!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...