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

如题所述

第1个回答  2013-12-30
我的笨方法:
以/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( )函数来调用这个脚本。
第2个回答  2014-01-11
需要判断两次或多次取中间值,否则不准确 /proc这个方法就可以啊
第3个回答  2014-01-02
time不能用吗?
第4个回答  2014-01-07
这不懂,呜呜,我也想知道!

在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限\/pro...
建议:要用C语言来编程实现的话,提取各项数据会比较复杂,而用shell脚本来提取的话,会简单的多;所以你可以尝试用脚本来提取数据并计算出CPU使用率,然后在C程序中用system( )函数来调用这个脚本。

Linux系统上cpu和内存的使用率是如何计算的
首先,对于CPU使用率,它并非瞬时值,而是通过记录进程在特定时间间隔内消耗的CPU资源来计算。系统将CPU划分为小时间单位,进程消耗的CPU时间会累计在\/proc\/[pid]\/stat文件中。计算时,会获取这段时间内进程消耗的CPU单位数,除以时间间隔内的总CPU单位,得到的就是CPU使用率。获取内存使用率则更为直接,...

linux怎么看cpu使用率
CPU使用率的计算方式=1-空闲时间\/总CPU时间,平均CPU使用率=1-新的空闲时间-旧的空闲时间\/新的总CPU时间-旧的总CPU时间。怎么查看CPU使用率?要想查看CPU使用率,就必须要读取\/proc\/stat和\/proc\/[pid]\/stat这两个文件,然后再按照上面的公式计算,但其实现在有很多性能分析攻击已经帮我们计算好了。t...

Linux下怎么查看内存使用情况和CPU利用率?
1. 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲...

Linux c 语言怎么方便的读取 cpu,磁盘信息
CPU占用 需要查看\/proc\/stat 的信息 磁盘需要 使用statfs这个函数来确认文件所包含的信息。我附上我的代码给你参考。我的代码支持CPU使用率(占用率),内存占用率,及磁盘占用率。include <stdio.h>#include <stdlib.h>#include <sys\/time.h>#include <unistd.h>#include <sys\/vfs.h>#include <...

linux查看cpu占用率的方法:
1.2 top使用 打开top,可以指定更新的周期。输入H,打开隐藏的线程;输入1,可以显示单核CPU使用情况。top -H -b -d 1 -n 200 > top.txt,每个1秒统计一次,共200次,显示线程细节,并保存到top.txt中。top采样来源你还依赖于\/proc\/stat和\/proc\/\/stat两个,这两个的详细介绍参考:\/proc\/...

如何正确获取容器的CPU利用率?
正确获取容器 CPU 利用率的关键在于理解容器环境下的特殊性。首先,我们需要知道在默认情况下,\/proc\/stat 在容器中反映了宿主机的 CPU 使用情况,而非容器本身。为了解决这个问题,有两步策略:一是使用 lxcfs,它允许你在容器中挂载并修改 \/proc\/stat,使其反映容器的实际 CPU 使用。业界公司如kubelet...

Linux下如何监测cpu利用率
2、mpstat mpstat命令会把每一个可用的处理器都写入标准输出中,第一个处理器编号为0,同时对所有处理器的全部平均值做一次报告。默认情况下,只会输出全部平均值。要查看每一个CPU的情况,需要增加参数。3、sar 使用sar命令可以收集,报告和保存系统活动信息。sar命令会把当天的CPU活动情况全部写入标准...

如何查看linux系统CPU利用率
网络利用率 通过查看文件\/proc\/net\/dev 可以了解,centos系统的网络使用情况跟windows的网络情况类似 注意事项 如果是查看系统负载的话是需要通过,CPU使用率,内存使用率,网络负载,硬盘容量等等来综合计算出来的。如果对于linux不是特别了解,或者想一次获取比较全面,可以通过编写脚本或者相关的监控工具。出...

php怎么得到cpu 内存 网络流量的使用率(在linux下)
echo "共有".count($out[1])."个CPU,每个CPU利用率如下:";for($n=0;$n<count($out[1]);$n++){ echo $out[1][$n]."=".(100*($out[1][$n]+$out[2][$n]+$out[3][$n])\/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]))."%";} ?> \/\/\/ <...

相似回答