linux系统性能优化及瓶颈分析

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 操作,或者说一秒中有多少时间

相关文档
最新文档