技术分享-探针如何计算CPU/内存使用率

牧云主机助手:

简单、易用的主机一体化运维托管平台,帮你解放双手,像放羊一样管理服务器

用过牧云主机助手的师傅们应该都使用过“资源监控”的功能,还没用过的师傅可以查看往期文章,或者直接点击下方链接进入产品免费试用👇

长亭百川云平台-牧云主机管理助手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

各个字段的含义如下:

  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 时间。


有了统计信息后,就可以计算出来 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 又是怎样实现的呢?

如果你想了解牧云主机助手其他功能实现原理,欢迎在评论区留言。或者扫描下方二维码进入交流群获取更多技术相关资讯~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值