Linux环境下如何计算CPU占用率

文章来源:角膜穿孔   发布时间:2020-9-8 20:47:17   点击数:
  北京中科白癜风医院三级专科 http://pf.39.net/bdfyy/bjzkbdfyy/
1、Linux环境下查看CPU信息1.1、查看CPU详细信息

通过cat/proc/cpuinfo命令,可以查看CPU相关的信息:

[root

rh~]$cat/proc/cpuinfo

processor:0

vendor_id:GenuineIntel

cpufamily:6

model:44

modelname:Intel(R)Xeon(R)CPUE

.40GHz

stepping:

cpuMHz:.

cachesize:KB

physicalid:0

siblings:8

coreid:0

cpucores:4

apicid:0

initialapicid:0

fpu:yes

fpu_exception:yes

cpuidlevel:11

wp:yes

flags:fpuvmedepsetscmsrpaemcecx8apicsepmtrrpgemcacmovpatpse36clflushdtsacpimmxfxsrssessesshttmpbesyscallnxpdpe1gbrdtscplmconstant_tscarch_perfmonpebsbtsrep_goodxtopologynonstop_tscaperfmperfpnipclmulqdqdtes64monitords_cplvmxsmxesttmssse3cx16xtprpdcmpciddcasse4_1sse4_popcntaeslahf_lmaratepbdtstpr_shadowvnmiflexpriorityeptvpid

bogomips:.15

clflushsize:64

cache_alignment:64

addresssizes:40bitsphysical,48bitsvirtual

powermanagement:

......

在查看到的相关信息中,通常有些信息比较让人迷惑,这里列出一些解释:

physicalid:指的是物理封装的处理器的id。

cpucores:位于相同物理封装的处理器中的内核数量。

coreid:每个内核的id。

siblings:位于相同物理封装的处理器中的逻辑处理器的数量。

processor:逻辑处理器的id。

我们通常可以用下面这些命令获得这些参数的信息:

[root

rh~]$cat/proc/cpuinfo

grep"physicalid"

sort

uniq

physicalid:0

physicalid:1

[root

rh~]$cat/proc/cpuinfo

grep"cpucores"

sort

uniq

cpucores:4

[root

rh~]#cat/proc/cpuinfo

grep"coreid"

sort

uniq

coreid:0

coreid:1

coreid:10

coreid:9

[root

rh~]$cat/proc/cpuinfo

grep"siblings"

sort

uniq

siblings:8

[root

rh~]$cat/proc/cpuinfo

grep"processor"

sort

uniq

processor:0

processor:1

processor:10

processor:11

processor:1

processor:13

processor:14

processor:15

processor:

processor:3

processor:4

processor:5

processor:6

processor:7

processor:8

processor:9

通过上面的结果,可以看出这台机器:

1)有个物理封装的处理器(physicalid有个);

)每个物理封装的处理器有4个内核(cpucores为4);

3)每个物理封装的处理器有8个逻辑处理器(siblings为8),可见台机器的处理器开启了超线程技术,每个内核(core)被划分为了个逻辑处理器(processor);

4)总共有16个逻辑处理器(processor有16个);

超线程技术:超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。

1.、查看多核CPU信息

可以使用mpstat命令或sar命令来查看。具体使用可以通过manmpstat/sar来查看。

、在Linux环境下计算进程的CPU占用.1、通过/proc/stat文件查看所有的CPU活动信息

下面实例数据是内核.6.4-4版本以上的:

[root

rh~]$cat/proc/stat

cpu

cpu071678

cpu

cpu

cpu

cpu

cpu547936906

cpu69

cpu

cpu

cpu

cpu

cpu

cpu

cpu139446479

cpu147300476

cpu

intr1144384911187071704...省略若干数据...

ctxt

btime

processes

procs_running1

procs_blocked0

softirq417638854

第一行的数据表示的是CPU总的使用情况。我们来解释一下这行数据各数值的含义:

1)这些数值的单位都是jiffies,jiffies是内核中的一个全局变量,用来记录系统启动以来产生的节拍数,在Linux中,一个节拍大致可以理解为操作系统进程调度的最小时间片,不同的Linux系统内核这个值可能不同,通常在1ms到10ms之间。

)cpu

user()从系统启动开始累积到当前时刻,处于用户态的运行时间,不包含nice值为负的进程。

nice(40)从系统启动开始累积到当前时刻,nice值为负的进程所占用的CPU时间。

system()从系统启动开始累积到当前时刻,处于核心态的运行时间。

idle()从系统启动开始累积到当前时刻,除IO等待时间以外的其他等待时间。

iowait()从系统启动开始累积到当前时刻,IO等待时间。(since.5.41)

irq(41)从系统启动开始累积到当前时刻,硬中断时间。(since.6.0-test4)

softirq()从系统启动开始累积到当前时刻,软中断时间。(since.6.0-test4)

stealstolen(0)Whichisthetimespentinotheroperatingsystemswhenrunninginavirtualizedenvironment.(since.6.11)

guest(0)WhichisthetimespentrunningavirtualCPUforguestoperatingsystemsunderthecontroloftheLinuxkernel.(since.6.4)

从以上信息我们可以得到总的CPU活动时间为:

totalCPUTime=user+nice+system+idle+iowait+irq+softirq+stealstolen+guest

.、通过/proc/[PID]/stat文件查看某一进程的CPU活动信息

..1、存储进程信息的文件目录

Linux系统贯彻“一切都是文件”的思想,所有的进程的运行状态也都可以通过读取文件来获取。/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。

在/proc/[PID]/目录下的各个文件记录着这个进程的各项运行指标。是进程号。

..、查看进程运行的详细信息

通过查看/proc/[PID]/stat文件,可以进程运行的详细信息,其中就包括CPU占用信息。比如:

[root

rh~]$cat/proc/1/stat

1(init)S-301600101551615110518551615

/proc/[PID]/stat文件信息解释

看到上面这些信息,肯定会很迷惑,不知道每个字段都是什么意思。

1)我们可以通过man5proc命令查看文档,找到/proc/[pid]/stat节点,就可以看到各字段的意思了。如:

/proc/[pid]/stat

Statusinformationabouttheprocess.Thisisusedbyps(1).Itisdefinedin/usr/src/linux/fs/proc/array.c.

Thefields,inorder,withtheirproperscanf(3)formatspecifiers,are:

pid%dTheprocessID.

转载请注明:http://www.iwkqm.com/tjyy/11152.html