`
tuhaitao
  • 浏览: 375670 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux-CPU监控

阅读更多

监控的目的是为了,找出系统的瓶颈,理解并分析当前系统的特点,现在多数的系统跑的是应用类型,例如:

1.数据库(Oracle, MySQL,等)

2.Cache服务(Memcached, Squid等)

2.应用服务器(Tomcat, Apache,Nginx, Jboss, sendmail等)

 

其实这些应用软件大致可以分为两类:

1. 数据读取范畴(I/O 请求占用多数时间)

 

     在这个范畴的应用软件,基本是处理高负荷的内存使用以及存储的系统,大量的时间处在数据处理的过程中,多半的软件不会对CPU发起更多的处理请求,当然这些软件也使用CPU,但都是为了产生I/O请求一集进入到内核态中断所发起的请求。

 

2. 数据处理范畴(CPU计算占用多数时间)

 

    处在这个范畴的应用软件,基本是高负荷的CPU占用为主,以及高密度的数学计算,通常web服务器,Tomcat,Jboss这样的应用服务器,或者一些中间件都是这个范畴的应用软件。

 

在这里我们先介绍一下CPU范畴居多的服务器,怎么监控CPU的性能:

 

1.安装监控工具

 

标准的Linux发行版里都带有了top命令,除此意外还有一个sysstat的linux监控工具,可以使用

 

http://sebastien.godard.pagesperso-orange.fr/

 

sysstat里包括了一系列的监控工具,比较常用的有vmstat, mpstat, iostat

 

首先我们使用vmstat来看一下输出:

 

 

[root@localhost ~]# vmstat
procs    ------memory------     ---swap-- -----io---  ----system-----  -----cpu-----
 r  b    swpd  free        buff       cache  si  so  bi   bo  in   cs   us  sy  id  wa 
 0 0    0         424904  14784   45484 0   0   29   2   26  14  0    1   99  1   
 

 

这里简单解释一下几个比较重要的列所代表的含义:

 

 

列名称 含义
r Run Queue, 表示当前CPU运行队列中线程的数目,代表线程出于可运行状态,但CPU尚未执行。
b Blocked, 表示当前进程阻塞并等待I/O请求完成的数目。
in Interrupts, 当前终端被处理的数目。
cs Context Switch, 表示当前系统内核中,发生上下文切换的数目。
us Utilization, 表示CPU利用率百分比。
sys System kernel and Interrupts, 表示内核中断利用率的百分比。
wa All runnable threads are blocked waiting on I/O, 表示所有可运行状态的线程被阻塞在I/O的百分比。
id Idle, CPU空闲时间百分比。

 

这里产生了一个系统性能的快照,监控CPU,我们最关心的莫过于CPU使用率,这系统输出中---cpu---下的id列,代表CPU空闲时间百分比,idle的缩写,这里数值是99,表示系统非常空闲,同时r,b,us数值均为0,in与cs 也出于很低的数值位,总体数值表明该系统非常空闲,几乎不做任何事情。

 

 

下边给一个系统比较繁忙的例子,并且持续监控10秒

 

 

 

[root@localhost ~]# vmstat 1
procs ---------memory--------- ---swap--- -----io---- -----system----- -----cpu-----
 r   b  swpd free buff cache si so bi bo in cs us sy id wa
 3  0  207689 15094 80387 156631 0 0 0 2 726  26 82 20 0 0
 2  0  207689 14768 80387 156165 0 0 0 2 738  23 96 3 0 0
 1  0  207689 14723 80387 156774 0 356 0 2308 987 80 93 16 0 0
 2  0  208352 13815 79183 156393 0 356 0 1038 667 62 91 13 0 0
 1  0  208352 301812 77132 155414 0 0 0 2 873 24 87 6    0   0
 3  0  208352 301812 77132 155547 0 0 0 2589 896 36 92 11 0 0
 4  0  208352 301812 76062 155751 0 0 0 2 850  30 91 12 0 0
 4  0  208352 301812 76062 155482 0 0 0 2 736  26 88 6 0 0
 2  0  208352 301812 76103 155823 0 0 0 2 812  23 85 7 0 0
 0  0  208352 301812 76103 155979 0 0 0 2 887  21 77 9 1 0
 

根据上边的数值,我们可以观察到:

 

1. in的数值很高,说明有大量的中断请求,而cs的数值较少,上下文切换较少,这说明可能有一个进程在产生对硬件设备的请求。

2. us平均数值在85以上,而cs的数值不高,说明上下文切换很少, 这说明这个应用程序很可能还在CPU里被处理。

3. r的数值有正常范围应该在1-3个以内,显然有2个4,这说明,超出了限制。

 

这里简单介绍一下r的含义:

 

r死Runnable Queue, 实际上每个CPU都维护这一个线程的运行队列,调度器应该不断的切换,并且执行线程, 当进程中的线程不是在阻塞队列中,或者等待I/O中,那么 就是在可运行状态中, 如果CPU出于高负荷状态下,那么内核调度将无法及时响应系统请求,这会使可运行状态进程的线程阻塞在运行队列里,随着队列越来越大,进程中的线程将话费更多的时间等待被执行。

 

大家可以用top命令查看系统的平均运行队列状况,在top中叫做load averages, top中列出的是指,1,5,15分钟内的运行队列状况。

 

 

下边再介绍一个工具 mpstat

 

这个工具主要是用在多核的处理器中, 你可以使用mpstat来监控每个核的处理情况.

 

 

[root@localhost ~]# mpstat -P ALL 1
Linux 2.6.35.14-95.fc14.i686 (localhost.localdomain)    2011年08月28日  _i686_  (1 CPU)

18时52分19秒  CPU  %usr  %nice  %sys %iowait   %irq   %soft  %steal  %guest   %idle
18时52分20秒  all     0.00      0.00   0.00      0.00    0.00    0.00    0.00      0.00      100.00
18时52分20秒  0      0.00      0.00   0.00      0.00    0.00    0.00    0.00      0.00     100.00
18时52分20秒  1      0.00     0.00   0.00      0.00    0.00    0.00    0.00      0.00     100.00

 

mpstat命令打印出的CPU利用率基本与vmstat一致,但是mpstat可以基于单个处理器计算统计的数值:)

1
2
分享到:
评论
3 楼 tuhaitao 2011-08-29  
如果想单独监控一个进程,写一个ps的shell即可(这里监控sql):

while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep -E "(^| )mysqld($| )"; sleep 1; done


如果想分析历史,写日志到文件里即可
2 楼 tuhaitao 2011-08-29  
oldsong 写道
这些工具太简单了吧,看实时的还行,如果查看历史记录,楼主的方法行吗

哥们,想记录历史,你得留日志,分析日志方可分析历史
1 楼 oldsong 2011-08-28  
这些工具太简单了吧,看实时的还行,如果查看历史记录,楼主的方法行吗

相关推荐

Global site tag (gtag.js) - Google Analytics