Perl 获取cpu使用率
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时间=user+system+nice+idle+iowait+irq+softirq “intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。 那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值: 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |