Perl 获取cpu使用率

Perl 获取cpu使用率,第1张

概述1、先了解/proc/stat文件信息     在Linux/Unix下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的CPU利用率是指:CPU执行非系统空闲进程的时间 / CPU总的执行时间。     此信息都存储在/proc/stat文件中,     在Linux的内核中,有一个全局变量:Jiffies。 J

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使用率所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1281066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存