牧云主机助手:
简单、易用的主机一体化运维托管平台,帮你解放双手,像放羊一样管理服务器
用过牧云主机助手的师傅们应该都使用过“资源监控”的功能,还没用过的师傅可以查看往期文章,或者直接点击下方链接进入产品免费试用👇
长亭百川云平台-牧云主机管理助手http://rivers.chaitin.cn
其中有一个 CPU 使用率的指标,那么这个使用率是怎么计算的呢?
有关注到这个指标的师傅可能使用 top 或 htop 等命令能看到类似的数据
top 和 htop 是怎么实现的?
今天就由牧云主机助手和大家一起探索一下 CPU 使用率的手动计算方式
定义一下:使用率 = (work_time - old_work_time) / (total_time - old_total_time)
如何获取 linux 服务器 CPU 的 work_time 和 total_time 呢?
/proc/stat 文件的第一行就是所有 CPU 的统计信息之和,一行有多个字段,分别是
user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice
各个字段的含义如下:
-
user:用户态(user mode)的 CPU 时间,包括用户程序和用户态进程所消耗的 CPU 时间。
-
nice:优先级较低的用户态(user mode)的 CPU 时间。
-
system:内核态(system mode)的 CPU 时间,包括内核和内核态进程所消耗的 CPU 时间。
-
idle:空闲状态的 CPU 时间。
-
iowait:等待 I/O 操作完成的 CPU 时间。
-
irq:处理硬件中断的 CPU 时间。
-
softirq:处理软件中断的 CPU 时间。
-
steal:被虚拟化环境偷取的 CPU 时间。
-
guest:运行虚拟机的 CPU 时间。
-
guest_nice:优先级较低的运行虚拟机的 CPU 时间。
有了统计信息后,就可以计算出来 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 的使用率了✅
内存的使用度是如何获取的呢?
/proc/meminfo 文件中包含了 Linux 服务器的内存统计信息
相对应的,总内存的大小就是 MemTotal,可用内存的大小就是 MemFree,可能可用内存(free+缓存)的大小就是 MemAvailable
牧云主机助手中资源监控中内存使用 Used = MemTotal - MemAvailable
首期的技术分享到这里就结束了(抛砖),资源监控中的网络,磁盘统计数据是不是可以通过 procfs 获取到呢?以及 windows 又是怎样实现的呢?
如果你想了解牧云主机助手其他功能实现原理,欢迎在评论区留言。或者扫描下方二维码进入交流群获取更多技术相关资讯~