您的位置:首页 > 运维架构 > Linux

linux系统性能分析工具

2011-02-27 10:57 477 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: