linux系统性能优化及瓶颈分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux系统性能优化及瓶颈分析
一,用vmstat分析系统I/O情况
[root@localhost ~]# vmstat -n 3 (每个3秒刷新一次)
procs-----------memory--------------------swap--- ---io---- --system---- ------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 144 186164 105252
2386848 0 0 18 166 83 2 48 21 31 0
2 0 144 189620 105252
2386848 0 0 0 177 1039
1210 34 10 56 0
0 0 144 214324 105252
2386848 0 0 0 10 1071 670 32 5 63 0
0 0 144 202212 105252
2386848 0 0 0 189 1035 558 20 3
77 0
2 0 144 158772 105252
2386848 0 0 0 203 1065
2832 70 14 15 0
IO
-bi:从块设备读入的数据总量(读磁盘)(KB/S)
-bo:写入到块设备的数据总量(写磁盘)(KB/S)
随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大
二,用iostat分析I/O子系统情况
如果你的系统没有iostat,sar,mpstat等命令,安装sysstat-
7.0.2-1.el5.i386.rpm包,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在内核2.4和内核2.6中数据来源不太一样,对于kernel 2.4, iostat 的数据的主要来源是 /proc/partitions;在2.6中,数据来源主要是
/proc/diskstats和/sys/block/sd*/stat这两个文件
#cat /proc/diskstats | grep sda
8 0 sda 17945521 1547188 466667211 174042714 15853874
42776252 469241932 2406054445 0 137655809 2580960422
8 1 sda1 936 1876 6
12
8 2 sda2 19489178 466659986 58655070 469240224
8 3 sda3 1270 1441 33
264
8 4 sda4 4 8
0 0
8 5 sda5 648 1442 0
8 6 sda6 648 1442 0
第1列 : 磁盘主设备号(major)
第2列 : 磁盘次设备号(minor)
第3列 : 磁盘的设备名(name)
第4列 : 读请求总数(rio)
第5列 : 合并的读请求总数(rmerge)
第6列 : 读扇区总数(rsect)
第7列 : 读数据花费的时间,单位是ms.(从__make_request到end_that_request_last)(ruse)
第8列 : 写请求总数(wio)
第9列 : 合并的写请求总数(wmerge)
第10列 : 写扇区总数(wsect)
第11列 : 写数据花费的时间,单位是ms. (从__make_request到end_that_request_last)(wuse)
第12列 : 现在正在进行的I/O数(running),等于I/O队列中请求数
第13列 : 系统真正花费在I/O上的时间,除去重复等待时间(aveq)
第14列 : 系统在I/O上花费的时间(use)。
#iostat -x 1
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/27/2009
avg-cpu: %user %nice %system %iowait %steal %idle
30.72 0.00 5.00 5.72 0.00 58.56 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.79 21.81 9.15 8.08 237.99 2 39.29 27.69 1.32 76.31 4.07 7.
02
sdb 0.69 19.13 3.26 2.99 153.08 176.92 52.85 0.43 68.80 5.96 3 .72
sdc 3.47 89.30 10.95 7.30 213.30 7 72.94 54.04 1.32 72.43 4.18 7.
63
每项数据的含义如下,
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512
字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即
(rsect+wsect)/(rio+wio)
avgqu-sz: 平均I/O队列长度。即 aveq/1000 (因为aveq的单位为毫秒)。await: 平均每次设备I/O操作的等待时间 (毫秒)。即
(ruse+wuse)/(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 use/(rio+wio) %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间