android top cpu 瞬时 过程_对cpu与load的理解及线上问题处理思路解读

前言

2019双11还有不到2个月就要到来了,大家也都知道服务器在大促期间由于流量的增加势必导致机器的cpu与load变高。因此趁着这个时机正好再好好学习、巩固一下cpu和load的概念,为双11做准备的同时也是增加自己的技能储备。

不过cpu和load这块真的还是很需要积累的,我自己经验尚浅,感觉还是有许多写的不到位与不对的地方,也是希望如果有错误,大家可以帮助指正。

top命令

既然说了cpu和load,那总需要监控吧,没有监控就不知道cpu和load,后面的一切也就无从谈起了。

top命令是最常见的查看cpu和load的命令,拿我自己虚拟机上装的ubuntu系统执行一下top命令(默认3秒刷1次,-d可指定刷新时间):

745d172a4f64afc8471670cbbae802c4.png

做了一张表格比较详细地解释了每一部分的含义,其中重要属性做了标红加粗:

6b82a90d8e7b93ec8f000cd6083ceec3.png

内存与SWAP输出格式是一样的,因此放在了一起写。

cpu如何计算

当我们执行top命令的时候,看到里面的值(主要是cpu和load)值是一直在变的,因此有必要简单了解一下Linux系统中cpu的计算方式。

cpu分为系统cpu和进程、线程cpu,系统cpu的统计值位于/proc/stat下(以下的截图未截全):

864a79482e0216db7f13cca023132e7e.png

cpu、cpu0后面的这些数字都和前面的us、sy、ni这些对应,具体哪个对应哪个值不重要,感兴趣的可以网上查一下文档。

进程cpu的统计值位于/proc/{pid}/stat下:

7983e2e0c34660554603f0936932ea07.png

线程cpu的统计值位于/proc/{pid}/task/{threadId}/stat下: 

15e83c4af42d1cf0b2ab29a5f79269f8.png

这里面的所有值都是从系统启动时间到当前时间的一个值。因此,对于cpu的计算的做法是,采样两个足够短的时间t1、t2:

  • 将t1的所有cpu使用情况求和,得到s1

  • 将t2的所有cpu使用情况求和,得到s2

  • s2 - s1得到这个时间间隔内的所有时间totalCpuTime

  • 第一次的空闲idle1 - 第二次的空闲idle2,获取采样时间内的空闲时间

  • cpu使用率 = 100 * (totalCpuTime - idle) / totalCpuTime

其他时间例如us、sy、ni都是类似的计算方式,总结起来说,cpu这个值反应的是某个采样时间内的cpu使用情况。因此有时候cpu很高,但是打印线程堆栈出来发现高

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值