linux系统获取cpu占用的方法

获取某进程cpu占用有很多方法,比如top命令,ps命令,以及读取系统文件(/proc/pid/stat)等等,有时候需要评估某个程序运行过程中的资源占用(例如cpu占用、mem占用),此时可以利用上面的读取系统文件方法,准确方便地得到cpu/memory占用信息

通过/proc/pid/stat文件获取指定进程的cpu占用信息

(首先,/proc/self/stat其实就是本进程对应的cpu信息文件)

proc(5) — Linux manual page

在这里插入图片描述

该文件有很多字段,其中跟cpu占用有关的为:utime、stime、cutime、cstime,他们的含义分别为:某进程在用户空间消耗的cpu时间片、在内核空间消耗的cpu时间片、 所有已死线程在用户态消耗的cpu时间片、所有已死线程在内核态消耗的cpu时间片,他们的单位为jiffies。

jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间

关于jiffies,请参考:Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解(好文)

这里有个问题,1 tick等于几毫秒?貌似linux kernel 4.x版本还是等于10ms?按理说应该等于1ms才对。。。还是说程序里可以设置这个值?

进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。

参考:移动端测试===PROC系列之—/proc/pid/stat 如何准确取cpu的值


/proc/pid/stat和top命令有和区别

参考: How to calculate CPU Usage -/proc/stat vs top(好文)

本质他们是一样的,都是获取某进程在某段时间内消耗的cpu节拍(tick)数量,除以该段时间内cpu总的tick数量。但是很多人top命令参数用的不对,导致结果有差异:正确用法需要指定-n2(迭代两次)以及-d 1(例如:设置采样间隔为1s,若不指定top默认采用3s的采样间隔)

在多核心的计算机中,多线程程序的cpu使用率可能会超过100%,因为他还将利用处理器的其他核心,使得总cpu利用率超过100%

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值