1、先了解/proc/stat文件信息
在linux/Unix下,cpu利用率分为用户态,系统态和空闲态,分别表示cpu处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的cpu利用率是指:cpu执行非系统空闲进程的时间 / cpu总的执行时间。
此信息都存储在/proc/stat文件中,
在linux的内核中,有一个全局变量:JiffIEs。 JiffIEs代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffIEs的单位就是1/HZ。Intel平台jiffIEs的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个cpu时间片,JiffIEs都要加1。 cpu的利用率就是用执行用户态+系统态的JiffIEs除以总的JifffIEs来表示。
在linux系统中,可以用/proc/stat文件来计算cpu的利用率。这个文件包含了所有cpu活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。样例如下:
[root@bogon tmp]# cat /proc/stat
cpu 2175 501 15724 1114163 7094 2153 1144 0
cpu0 2175 501 15724 1114163 7094 2153 1144 0
intr 11576005 11430258 11 0 3 3 0 5 0 1 0 0 0 107 0 0 111811 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5461 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 530531
btime 1228361375
processes 6764
procs_running 1
procs_blocked 0
输出解释
cpu 以及cpu0、cpu1每行的每个参数意思(以第一行为例)为:
参数 解释
user (432661) 从系统启动开始累计到当前时刻,用户态的cpu时间(单位:jiffIEs) ,不包含 nice值为负进程。1jiffIEs=0.01秒
nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的cpu时间(单位:jiffIEs)
system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffIEs)
IDle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffIEs)
iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffIEs) ,
irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffIEs)
softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffIEs)
cpu时间=user+system+nice+IDle+iowait+irq+softirq
“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来cpu发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。
那么cpu利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
1、先了解/proc/stat文件信息
2、实例代码
#!/usr/bin/perl##use warnings;#$SLEEPTIME=5;if (-e "/tmp/stat") {unlink "/tmp/stat";}open (JIFF_TMP,">>/tmp/stat") || dIE "Can't open /proc/stat file!\n";open (JIFF,"/proc/stat") || dIE "Can't open /proc/stat file!\n";@jiff_0=<JIFF>;print JIFF_TMP $jiff_0[0] ;close (JIFF);sleep $SLEEPTIME;open (JIFF,"/proc/stat") || dIE "Can't open /proc/stat file!\n";@jiff_1=<JIFF>;print JIFF_TMP $jiff_1[0];close (JIFF);close (JIFF_TMP);@USER=`awk '{print $2}' "/tmp/stat"`;@NICE=`awk '{print $3}' "/tmp/stat"`;@SYstem=`awk '{print $4}' "/tmp/stat"`;@IDLE=`awk '{print $5}' "/tmp/stat"`;@IOWAIT=`awk '{print $6}' "/tmp/stat"`;@IRQ=`awk '{print $7}' "/tmp/stat"`;@SOFTIRQ=`awk '{print $8}' "/tmp/stat"`;$JIFF_0=$USER[0]+$NICE[0]+$SYstem[0]+$IDLE[0]+$IOWAIT[0]+$IRQ[0]+$SOFTIRQ[0];$JIFF_1=$USER[1]+$NICE[1]+$SYstem[1]+$IDLE[1]+$IOWAIT[1]+$IRQ[1]+$SOFTIRQ[1];$SYS_IDLE=($IDLE[0]-$IDLE[1]) / ($JIFF_0-$JIFF_1) * 100;$SYS_USAGE=100 - $SYS_IDLE;printf ("The cpu usage is %1.2f%%\n",$SYS_USAGE);总结
以上是内存溢出为你收集整理的Perl 获取cpu使用率全部内容,希望文章能够帮你解决Perl 获取cpu使用率所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)