Linux CPU监控指标



    Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top、vmstat等命令。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止,比较准确的说,top命令提供了实时的对系统处理器的状态监视,它将显示系统中 CPU 最“敏感”的任务列表。该命令可以按 CPU 使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。 



   top命令提供如下参数:



    top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]



选项名 称        

说明

d  delay  

指定每两次屏幕信息刷新之间的时间间隔(delay 即为具体的间隔时间数值,它的单位是秒),可以使用 s交互命令来改变之。 

p pid

通过指定监控进程 ID(pid)来仅仅监控某个进程的状态。

q

该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么 top 将以尽可能高的优先级运行。 

c

显示整个命令行而不只是显示命令名。 

C

显示 CPU 总体信息而取代分别显示每个 CPU 的信息,此参数仅对SMP 系统有效。 

S

指定累计模式。

s

使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i

使 top 不显示任何闲置或者僵死进程。 

n  iter

指定 top命令迭代输出的次数,iter为具体的迭代次数值。

b

"Batch"方式运行top,在这种方式下,所有来自终端的输入都将被忽略(当然除了ctrl+c),该参数可以结合参数“n"运行指定迭代次数退出或者该进程被杀死。这是运行top输出到哑终端或输到非终端的默认运行方式



 



示例一  



在控制台输入“top”,回车如下:






top命令输出信息包含两部分内容:



第一部分为统计信息,包含五行数据信息;第二部分为详细信息,显示了各个进程的详细信息。



 



有必要了解下统计信息部分的输出信息内容的含义:



输出信息

说明

19:47:24

当前时间

up 15 min

系统运行时间

2 users

当前登录用户数,这里是jzhou和root

load average:0.02 , 0.14 , 0.21

系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值,即0.02,0.14,0.21

Tasks:122 total, 1 running,120 sleeping,0 stopped,1 zombie

122个进程(任务),其中有2个处于运行状态,120个处于睡眠状态,没有停止的进程,有1个僵尸进程

Cpus:0.7%us,0.7%sy,0.0%ni,97.6%id,0.0%wa,0.7%hi,0.3%si,0.0%st

Cpu运行状态,用户进程(user)占用CPU的0.7%,系统进程(system)占用CPU的0.7%,用户进程没有改变过优先级的进程,所以user nice值为0.0%,97.6%的CPU处于空闲状态(idle),没有等待的输入输出,所以iowait的值也为0.0%,硬件请求终端时间(hardware interrupt)占CPU的0.7%,软终端请求时间占CPU的0.3%,st代表steal time,具体作用不是很清楚,网上说是为其它CPU预留的,不清楚

Mem:1035244k total,537528k used,497716k free,25816k buffers

内存总量为1035244k,已使用的内存总量为537528k,497716k为空闲内存总量,25816k用作内核缓存的内存总量。(这是虚拟机的情况,物理机好像还有其它参数)

Swap:0k total,0k used,0k free,351392k cached

交换分区总量为0k,使用的交换分区总量为0k,空闲交换分区总量为0k,351392k为缓冲的交换区总量(cached)、内存中的内容被患处到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

然后看看详细信息部分输出的信息的内容:


输出信息

说明

PID

进程标识符

USER

进程所有者用户名

PR/PRI

进程执行的优先级

NI

NICE值,负值表示高优先级,正值表示低优先级

VIRT

进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES

进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR

共享内存大小,单位kb

S/STAT

进程状态

D:不可中断的睡眠状态

R:正在运行,或在队列中的进程

S:处于休眠状态

T:停止或被追踪

Z:僵尸进程

W:进入内存交换

X:死掉的进程


%CPU

上次更新到现在的CPU时间占用百分比

%MEN

进程使用的物理内存百分比

TIME+

进程使用的CPU时间总计,单位1/100s

COMMAND

进程被执行的命令名称



 



示例二                                                                                                             



vmstat 命令,可以使您能够在同一行看到系统的内存、CPU 等使用情况,通常您可以用该命令来查看CPU 的利用率和饱和度。 



先连接两个概念:



CPU利用率:CPU利用率可以使用 vmstat通过从 100减去 id 或者 us与 sy之和来计算CPU 利用率



CPU饱和度:CPU 饱和度可以通过 vmstat 命令的“procs:r”来作为衡量标准,由于它是所有 cpu 运行队列的合计值,因此将 procs:r 除以 CPU 数目所得到的值可与其他服务器相比较。



任何持续不变的非零值都会引起性能的下降,但性能的下降是逐渐的。



 



vmstat命令参数如下:



vmstat [-n] [delay [count]] 



也有必要了解下vmstat命令参数的含义:



参数名称

说明

n

通过这个开关参数,如果启用它则仅显示一次表头信息

delay

指定每两次屏幕信息刷新之间的时间间隔,单位:s

count

在结合delay参数使用时,如果给指定数值,则运行指定的次数后退出,否则将无限次运行



在控制台输入“vmstat –n 1”,回车执行后,该命令即为仅显示一次标头信息,每隔 1 秒钟显示一次 vmstat监控信息






然后了解下输出信息内容各部分代表的含义:






   



 



示例三                                                                                                                            



    还可以通过“uptime”命令来获得 CPU 平均负载的情况。平均负载的计算通常描述为可运行和运行线程的平均数目。举例来说,如果一枚单CPU 服务器上有1 个运行线程占用了 CPU,有3 个运行进程在调度程序队列中,那么平均负载即为 1+3=4。对于一枚 16CPU 的服务器,负载是16 个运行线程,有 24 个运行进程在调度程序队列中,那么平均负载是 40。如果平均负载始终高于CPU 的数目,则可能导致应用程序性能的下降。需要说明的是平均负载只适用于CPU 负载的初始估算,深入的分析我们还需要借助于其他工具来做。再对 CPU平均负载有一个初步了解以后,让我们来看看该命令是如何使用的,它的输出内容又包含那些内容。



因为“uptime”命令仅提供了一个可选参数项“V”,即:显示该命令的版本信息,所以不用叙述了。



 



在控制台输入“uptime”,回车执行后,运行结果:






可以看到“load average:0.53,0.65,0.34”即为 CPU 平均负载对应系统在第 1分钟,5 分钟和 15 分钟的平均负载值。同时它们也代表 CPU 利用率和饱和度。如果 CPU 数目和平均负载的值相等,通常代表 100%的 CPU利用率,小于 CPU数目,则表示利用率小于 100%,大于 CPU数目需要用饱和度来衡量。