永发信息网

在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限/proc/stat)

答案:4  悬赏:80  手机版
解决时间 2021-11-21 01:38
在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限/proc/stat)
最佳答案
我的笨方法:
以/proc/stat为例,它里面的内容如下:(第一行的几个单词,是我为了便于说明,另外标注的)
user nice system idle iowait irq softirq
cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0
cpu0 7680302 5263 111909 1355640955 47680 0 185343 0
cpu1 6527638 2261 327795 1356540189 249151 1 24242 0
intr 21259182 122 97003 0 0 0 0 0 0 1 44 0 0 4290639 0 0 0 742540 1330673 0 0 0 0 0 111 173 0 0 0 0 161039 191398 10286 2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 42582486
btime 1376534806
processes 346513
procs_running 1
procs_blocked 0
softirq 21851001 2 9105868 18006 318205 256633 2 1384334 1159984 60546 9547421
---------------------------- 分割线------------------------------
说明:
user:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system:从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle:从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait:从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq:从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq:从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
CPU时间=user+system+nice+idle+iowait+irq+softirq
-------------------------下面这几项可以不看------------------
intr:第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
ctxt:自系统启动以来CPU发生的上下文交换的次数。
btime:从系统启动到现在为止的时间,单位为秒。
processes:自系统启动以来所创建的任务的个数目。
procs_running:当前运行队列的任务的数目。
procs_blocked:当前被阻塞的任务的数目。
-----------------------------计算方法-----------------------------
那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
=============================================
建议:要用C语言来编程实现的话,提取各项数据会比较复杂,而用shell脚本来提取的话,会简单的多;所以你可以尝试用脚本来提取数据并计算出CPU使用率,然后在C程序中用system( )函数来调用这个脚本。
全部回答
这不懂,呜呜,我也想知道!
time不能用吗?
需要判断两次或多次取中间值,否则不准确 /proc这个方法就可以啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
杰克黑莓支持电信卡吗
怎么使用命令符来重装系统
作文,以一个东西为线索表达自己的感情
小花怎么画才能画得好看
为什么单亲家庭的女孩不能娶
今年粮食补贴是给种地的人还是给卖地的人
运城老康中附近有没有新的一室一厅的房子?
或者你在曼联找找 有没有叫这个法比奥 科恩特
从望花新村到辽宁工业展览馆的公交
flac3d的教学视频谁有?谢谢
打扫社区感受
2o15年一2o2o年中国生猪养殖行业市场供需前景
岩石书画艺术工作室地址在什么地方,想过去办
x-0.4x=0.72 x=( )
娶不到老婆怎么办
推荐资讯
《离亭燕》(一带江山如画,风物向秋潇洒。)的
已安装DD-WRT v24-sp2 (03/25/13) st
古代孕妇生产之时,为何需要大量的热水?
广联达计价软件GBQ4.0如何调整机械的市场价?
小便为什么发黑
AMD的CPU为什么没有散片
24小时尿蛋白定量是2300ml尿液里 0.39g/2
佛山市汇兆盈丰网络科技有限公司在什么地方啊
苏试续诗的原因是什么?他为什么会续错诗
《请君入瓮》txt全集下载
有没有可以给图片加井字线的软件
南海龙高路至广州北京路要怎样坐车去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?