﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>P.Linux Laboratory &#187; iostat</title>
	<atom:link href="http://www.penglixun.com/tag/iostat/feed" rel="self" type="application/rss+xml" />
	<link>http://www.penglixun.com</link>
	<description>MySQL DBA &#38; Linux SA</description>
	<lastBuildDate>Sun, 22 Jan 2012 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[转]iostat来对Linux硬盘IO性能进行了解</title>
		<link>http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html</link>
		<comments>http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html#comments</comments>
		<pubDate>Fri, 30 Oct 2009 02:48:22 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[iostat]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=510</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html 转载本站文章请注明，转载... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html </p>
<p></span>
<div>
<p>转载本站文章请注明，转载自：<strong>扶凯</strong>[<a href="http://www.php-oa.com/">http://www.php-oa.com</a>]</p>
<p>本文链接: <a title="iostat来对linux硬盘IO性能进行了解" href="http://www.php-oa.com/2009/02/03/iostat.html">http://www.php-oa.com/2009/02/03/iostat.html</a></p>
<p>以前一直不太会用这个参数。现在认真研究了一下iostat，因为刚好有台重要的服务器压力高,所以放上来分析一下.下面这台就是IO有压力过大的服务器</p>
<p><strong># iostat -x 1 10</strong><br />
Linux 2.6.18-92.el5xen    02/03/2009</p>
<p>avg-cpu:  %user   %nice %system %iowait  %steal   %idle<br />
1.10    0.00    4.82   39.54    0.07   54.46</p>
<p>Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util<br />
sda               0.00     3.50  0.40  2.50     5.60    48.00    18.48     0.00    0.97   0.97   0.28<br />
sdb               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00<br />
sdc               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00<br />
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00<br />
sde               0.00     0.10  0.30  0.20     2.40     2.40     9.60     0.00    1.60   1.60   0.08<br />
sdf              17.40     0.50 102.00  0.20 12095.20     5.60   118.40     0.70    6.81   2.09  21.36<br />
sdg             232.40     1.90 379.70  0.50 76451.20    19.20   201.13     4.94   13.78   2.45  93.16</p>
<p><strong><span id="more-510"></span>rrqm/s:</strong> 每秒进行 merge 的读操作数目。即 delta(rmerge)/s<br />
<strong>wrqm/s:</strong> 每秒进行 merge 的写操作数目。即 delta(wmerge)/s<br />
<strong>r/s:</strong> 每秒完成的读 I/O 设备次数。即 delta(rio)/s<br />
<strong>w/s:</strong> 每秒完成的写 I/O 设备次数。即 delta(wio)/s<br />
<strong>rsec/s:</strong> 每秒读扇区数。即 delta(rsect)/s<br />
<strong>wsec/s: </strong>每秒写扇区数。即 delta(wsect)/s<br />
<strong>rkB/s: </strong> 每秒读K字节数。是 rsect/s 的一半，因为每扇区大小为512字节。(需要计算)<br />
<strong>wkB/s:</strong> 每秒写K字节数。是 wsect/s 的一半。(需要计算)<br />
<strong>avgrq-sz: </strong>平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)<br />
<strong>avgqu-sz:</strong> 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。<br />
<strong>await:</strong> 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)<br />
<strong>svctm: </strong>平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)<br />
<strong>%util: </strong>一秒中有百分之多少的时间用于 I/O 操作，或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)</p>
<p><strong>如果 %util 接近 100%，说明产生的I/O请求太多，I/O系统已经满负荷，该磁盘<br />
可能存在瓶颈。<br />
idle小于70% IO压力就较大了,一般读取速度有较多的wait.</strong><br />
<strong>同时可以结合vmstat 查看查看b参数(<span style="font-family: verdana,arial,helvetica; font-size: x-small;">等待资源的进程数</span>)和wa参数(<span style="font-family: verdana,arial,helvetica; font-size: x-small;">IO等待所占用的CPU时间的百分比,高过30%时IO压力高</span>)</strong></p>
<p><strong>另外还可以参考</strong><br />
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了)，svctm 的大小一般和磁盘性能有关，CPU/内存的负荷也会对其有影响，请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await，说明 I/O 几乎没有等待时间；如果 await 远大于 svctm，说明 I/O 队列太长，应用得到的响应时间变慢，如果响应时间超过了用户可以容许的范围，这时可以考虑更换更快的磁盘，调整内核 elevator 算法，优化应用，或者升级 CPU。<br />
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标，但由于 avgqu-sz 是按照单位时间的平均值，所以不能反映瞬间的 I/O 洪水。</p>
<p><strong><br />
别人一个不错的例子.(I/O 系统 vs. 超市排队)</strong></p>
<p>举一个例子，我们在超市排队 checkout 时，怎么决定该去哪个交款台呢? 首当是看排的队人数，5个人总比20人要快吧? 除了数人头，我们也常常看看前面人购买的东西多少，如果前面有个采购了一星期食品的大妈，那么可以考虑换个队排了。还有就是收银员的速度了，如果碰上了连 钱都点不清楚的新手，那就有的等了。另外，时机也很重要，可能 5 分钟前还人满为患的收款台，现在已是人去楼空，这时候交款可是很爽啊，当然，前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。</p>
<p>I/O 系统也和超市排队有很多类似之处:</p>
<p>r/s+w/s 类似于交款人的总数<br />
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数<br />
平均服务时间(svctm)类似于收银员的收款速度<br />
平均等待时间(await)类似于平均每人的等待时间<br />
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少<br />
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。</p>
<p>我们可以根据这些数据分析出 I/O 请求的模式，以及 I/O 的速度和响应时间。</p>
<p><strong>下面是别人写的这个参数输出的分析</strong></p>
<p># iostat -x 1<br />
avg-cpu:  %user   %nice    %sys   %idle<br />
16.24    0.00    4.31   79.44<br />
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util<br />
/dev/cciss/c0d0<br />
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29<br />
/dev/cciss/c0d0p1<br />
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29<br />
/dev/cciss/c0d0p2<br />
0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00</p>
<p>上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。</p>
<p>平均每次设备 I/O 操作只需要 5ms 就可以完成，但每个 I/O 请求却需要等上 78ms，为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个)，假设这些请求是同时发出的，那么平均等待时间可以这样计算:</p>
<p>平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数</p>
<p>应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms，和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。</p>
<p>每秒发出的 I/O 请求很多 (约 29 个)，平均队列却不长 (只有 2 个 左右)，这表明这 29 个请求的到来并不均匀，大部分时间 I/O 是空闲的。</p>
<p>一秒中有 14.29% 的时间 I/O 队列中是有请求的，也就是说，85.71% 的时间里 I/O 系统无事可做，所有 29 个 I/O 请求都在142毫秒之内处理掉了。</p>
<p>delta(ruse+wuse)/delta(io) = await = 78.21 =&gt; delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8，表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23，而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35，为什么?! 因为 iostat 中有 bug，avgqu-sz 值应为 2.23，而不是 22.35。</p></div><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年10月21日 -- <a href="http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html" title="[转]Linux中查看系统资源占用情况的命令">[转]Linux中查看系统资源占用情况的命令</a> (0)</li><li>2012年01月23日 -- <a href="http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html" title="一个InnoDB性能超过Oracle的调优Case">一个InnoDB性能超过Oracle的调优Case</a> (1)</li><li>2010年08月27日 -- <a href="http://www.penglixun.com/tech/system/linux_cache_discovery.html" title="Linux Cache 机制探究">Linux Cache 机制探究</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]Linux中查看系统资源占用情况的命令</title>
		<link>http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html</link>
		<comments>http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html#comments</comments>
		<pubDate>Wed, 21 Oct 2009 09:54:58 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[iostat]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[top]]></category>
		<category><![CDATA[uptime]]></category>
		<category><![CDATA[vmstat]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=440</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html top: 主要参数 d：指定更... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html </p>
<p></span><span style="font-size: large;"><strong>top</strong>:</span><br />
主要参数<br />
d：指定更新的间隔，以秒计算。<br />
q：没有任何延迟的更新。如果使用者有超级用户，则top命令将会以最高的优先序执行。<br />
c：显示进程完整的路径与名称。<br />
S：累积模式，会将己完成或消失的子行程的CPU时间累积起来。<br />
s：安全模式。<br />
i：不显示任何闲置(Idle)或无用(Zombie)的行程。<br />
n：显示更新的次数，完成后将会退出to<br />
显示参数:<br />
PID（Process ID）：进程标示号。<br />
USER：进程所有者的用户名。<br />
PR：进程的优先级别。<br />
NI：进程的优先级别数值。<br />
VIRT：进程占用的虚拟内存值。<br />
RES：进程占用的物理内存值。<br />
SHR：进程使用的共享内存值。<br />
S：进程的状态，其中S表示休眠，R表示正在运行，Z表示僵死状态，N表示该进程优先值是负数。<br />
%CPU：该进程占用的CPU使用率。<br />
%MEM：该进程占用的物理内存和总内存的百分比。<br />
TIME＋：该进程启动后占用的总的CPU时间。<br />
Command：进程启动的启动命令名称，如果这一行显示不下，进程会有一个完整的命令行。<br />
top命令使用过程中，还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。<br />
&lt;空格&gt;：立刻刷新。<br />
P：根据CPU使用大小进行排序。<br />
T：根据时间、累计时间排序。<br />
q：退出top命令。<br />
m：切换显示内存信息。<br />
t：切换显示进程和CPU状态信息。<br />
c：切换显示命令名称和完整命令行。<br />
M：根据使用内存大小进行排序。<br />
W：将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。</p>
<p><strong><span style="font-size: large;"><span id="more-440"></span>free</span></strong><br />
1.作用<br />
free命令用来显示内存的使用情况，使用权限是所有用户。</p>
<p>2.格式<br />
free [－b－k－m] [－o] [－s delay] [－t] [－V]</p>
<p>3.主要参数<br />
－b －k －m：分别以字节（<acronym title="Kilobyte">KB</acronym>、<acronym title="Megabyte">MB</acronym>）为单位显示内存使用情况。<br />
－s delay：显示每隔多少秒数来显示一次内存使用情况。<br />
－t：显示内存总和列。<br />
－o：不显示缓冲区调节列。</p>
<p><strong><span style="font-size: large;">uptime</span></strong><br />
18:59:15 up 25 min,  2 users,  load average: 1.23, 1.32, 1.21<br />
现在的时间<br />
系统开机运转到现在经过的时间<br />
连线的使用者数量<br />
最近一分钟，五分钟和十五分钟的系统负载<br />
参数： -V 显示版本资讯。</p>
<p><strong><span style="font-size: large;">vmstat</span></strong><br />
procs &#8212;&#8212;&#8212;&#8211;memory&#8212;&#8212;&#8212;- &#8212;swap&#8211; &#8212;&#8211;io&#8212;- &#8211;system&#8211; &#8212;-cpu&#8212;-<br />
r  b   swpd free   buff   cache    si   so    bi     bo    in    cs   us  sy  id wa<br />
0  1  24980 10792 8296  47316    5   19   205    52  1161   698  26  3  1  70<br />
1 观察磁盘活动情况<br />
磁盘活动情况主要从以下几个指标了解：<br />
bi：表示从磁盘每秒读取的块数(blocks/s)。数字越大，表示读磁盘的活动越多。<br />
bo：表示每秒写到磁盘的块数（blocks/s）。数字越大，表示写磁盘的活动越多。<br />
wa：cpu等待磁盘I／O（未决的磁盘IO）的时间比例。数字越大，表示文件系统活动阻碍cpu的情况越严重，因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10，可能文件系统就需要进行性能调整了。<br />
2 观察cpu活动情况<br />
vmstat比top更能反映出cpu的使用情况：<br />
us：用户程序使用cpu的时间比例。这个数字越大，表示用户进程越繁忙。<br />
sy：系统调用使用cpu的时间比例。注意，NFS由于是在内核里面运行的，所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大 的话，就需要注意是否某个内核进程，比如NFS任务比较繁重。如果us和sy同时都比较大的话，就需要考虑将某些用户程序分离到另外的服务器上面，以免互 相影响。<br />
id：cpu空闲的时间比例。<br />
wa：cpu等待未决的磁盘IO的时间比例。</p>
<p><strong><span style="font-size: large;">iostat</span></strong><br />
用于统计CPU的使用情况及tty设备、硬盘和<acronym title="Compact Disc">CD</acronym>-ROM的I/0量<br />
参数:<br />
-c      只显示CPU行<br />
-d      显示磁盘行<br />
-k      以千字节为单位显示磁盘输出<br />
-t       在输出中包括时间戳<br />
-x      在输出中包括扩展的磁盘指标</p>
<p>avg-cpu:  %user   %nice    %sys %iowait   %idle<br />
20.25    0.18    2.61   76.39    0.57<br />
%iowait 等待本地I/O时CPU空闲时间的百分比<br />
%idle 未等待本地I/O时CPU空闲时间的百分比</p>
<p>Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn<br />
hda               9.86       284.34        84.48     685407     2036<br />
每秒传输数（tps）、每秒512字节块读取数（Blk_read/s）、每秒512字节块写入数（Blk_wrtn/s）和512字节块读取（Blk_read）和写入（Blk_wrtn）的总数量。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年08月10日 -- <a href="http://www.penglixun.com/tech/system/how_to_calc_load_cpu.html" title="Load和CPU利用率是如何算出来的">Load和CPU利用率是如何算出来的</a> (5)</li><li>2009年10月30日 -- <a href="http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html" title="[转]iostat来对Linux硬盘IO性能进行了解">[转]iostat来对Linux硬盘IO性能进行了解</a> (0)</li><li>2012年01月23日 -- <a href="http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html" title="一个InnoDB性能超过Oracle的调优Case">一个InnoDB性能超过Oracle的调优Case</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/system/commond_watch_linux_system_resources.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

