linux系统性能分析工具

 

       在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、vmstat、iostat、mpstat和sar,下面总结一下他们的作用及其用法。

 

用vmstat检查cpu和ram瓶颈 

  vmstat (Virtual Memory Statistics ),对系统的进程情况、内存使用情况、交换页和 I/O 块使用情况、中断以及 CPU 使用情况进行统计并报告相应的信息。第一个显示内容指出了计算机自上次重启至今的平均使用情况。后面的每一行信息是按 延时 定期地显示系统的各部分信息。进程信息和内存信息都是即时产生的。 

  vmstat的语法如下: 

   vmstat [-V] [-n] [delay [count]]

  其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。   

 

==================================================================================

用例:检查cpu瓶颈 

 

$ vmstat 2 5

   procs                      memory    swap          io     system         cpu

 r  b  w   swpd      free      buff     cache      si  so    bi    bo   in    cs  us  sy  id

 1  0  0  25324  20196 214720 1529664   0   0     0     0    0        0       1   0   1

 1  0  0  25324  20196 214720 1529664   0   0     0    30  109   132   3  31  66

 1  0  0  25324  20180 214728 1529672   0   0     0    40  107   135   3  35  62

 1  0  0  25324  20168 214728 1529672   0   0     0    60  107   154   2  33  65

 1  0  2  25324  20148 214740 1529680   0   0     4    86  116   164   4  30  66 

 

黑体部分是vmstat最需要关注的部分: 

     r(running):这个值表示正在运行(已经获得或者正在等待获得cpu time)的进程数量,正常情况下,当这个值超过服务器上cpu的数量,就可能存在cpu瓶颈,有一些任务要等待执行。当业务繁忙的时候,不超过2倍cpu数量,还是可以认为合理的。 

     b(blocked):被阻塞的进程。正常情况下为0比较好。 

     w(swapped):被交换出去的进程。正常情况下为0比较好。 

     pi(页换入,在linux下表示为si):当服务器出现ram内存短缺的时候,就会出现页换入操作,页换入操作表示服务器出现了ram短缺,所有具有虚拟内存的服务器会将页换出到交换磁盘。当从交换磁盘上读入ram内存内容时,任何非零的pi值都表示有附加的活动。 

     us(用户cpu):服务于用户任务的cpu百分比。 

     sy(系统cpu):服务于系统任务的cpu百分比。 

     id(空闲):空闲cpu的百分比。如果idle经常为0,或者cpu sy是cpu us两倍,那么系统可能面临cpu资源短缺。 

 

     r大于cpu数量,就存在cpu瓶颈,那么怎么看cpu数量呢? 

linux下:

     $ cat /proc/cpuinfo|grep processor|wc -l

 

用iostat监视I/O子系统情况 

  iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 

 

        iostat的语法如下: 

        iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

  其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。 

 

==================================================================================

iostat -x

Linux 2.6.35-24-generic (ubuntu) 2011年02月27日 _i686_ (1 CPU)

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           9.56    0.86    3.77   13.78    0.00   72.03

 

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sda             260.23    18.68   22.77    1.86  2257.20   164.47    98.33     0.80   32.49   6.99  17.20

 

rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s

wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s

r/s:   每秒完成的读 I/O 设备次数。即 delta(rio)/s

w/s:   每秒完成的写 I/O 设备次数。即 delta(wio)/s

rsec/s:   每秒读扇区数。即 delta(rsect)/s

wsec/s:   每秒写扇区数。即 delta(wsect)/s

rkB/s:   每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

wkB/s:   每秒写K字节数。是 wsect/s 的一半。

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)

avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。

await:   平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)

svctm:   平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)

%util:   一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

 

       如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑

更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

 

mpstat命令

        mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。mpstat的语法如下: 

 

       mpstat语法如下:

Usage: mpstat [ options... ] [ <interval> [ <count> ] ]

Options are:

[ -P { <cpu> | ALL } ] [ -V ]

 

==================================================================================

mpstat

Linux 2.6.18-194.el5      2011年02月27日

23时47分13秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

23时47分13秒  all    0.19    0.02    0.41    0.20    0.09   53.61    0.00   45.48    714.95

 

各値详解: 

%user 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负 进程 (usr/total)*100   

%nice 在internal时间段里,nice值为负进程的CPU时间(%)   (nice/total)*100   

%sys  在internal时间段里,核心时间(%)   (system/total)*100 

%iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100 

%irq 在internal时间段里,硬中断时间(%)      (irq/total)*100 

%soft 在internal时间段里,软中断时间(%)    (softirq/total)*100 

%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)(idle/total)*100 

%intr/s 在internal时间段里,每秒CPU接收的中断的次数intr/total)*100 

 

计算公式: 

total_cur=user+system+nice+idle+iowait+irq+softirq 

total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq 

user=user_cur – user_pre 

total=total_cur-total_pre 

 

其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。 

 

 

实例: 每2秒产生了2个处理器的统计数据报告 

下面的命令可以每2秒产生了2个处理器的统计数据报告,一共产生三个interval 的信息,然后再给出这三个interval的平 

均信息。默认时,输出是按照CPU 号排序。第一个行给出了从系统引导以来的所有活跃数据。接下来每行对应一个处理器的 

活跃状态。。

 

==================================================================================

 

mpstat -P ALL 2 3

Linux 2.6.18-194.el5      2011年02月27日

 

23时50分09秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

23时50分11秒  all    0.00    0.00    0.00    0.00    0.00    6.91    0.00   93.09   1001.06

23时50分11秒    0    0.00    0.00    0.00    0.00    0.00    6.91    0.00   93.09   1001.06

 

23时50分11秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

23时50分13秒  all    0.00    0.00    0.00    0.00    0.00   12.95    0.00   87.05    931.61

23时50分13秒    0    0.00    0.00    0.00    0.00    0.00   12.95    0.00   87.05    931.61

 

23时50分13秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

23时50分15秒  all    0.00    0.00    0.53    0.00    0.53   23.94    0.00   75.00    872.34

23时50分15秒    0    0.00    0.00    0.53    0.00    0.53   23.94    0.00   75.00    872.34

 

Average:     CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

Average:     all    0.00    0.00    0.18    0.00    0.18   14.59    0.00   85.06    934.97

Average:       0    0.00    0.00    0.18    0.00    0.18   14.59    0.00   85.06    934.97

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值