知识库

标准化实施手册及常见错误


linux 磁盘 I/O 性能诊断

<p><strong>常用 I/O 性能分析命令和性能诊断方法</strong></p> <h2>I/O 性能分析命令</h2> <ul> <li> <h4>iostat</h4> <p>iostat 是 Linux 最常见的磁盘 I/O 监控工具 基本用法: <code>iostat -d -x -k 1 10</code></p> <pre><code>d表示:显示设备(磁盘)使用状态。 k表示:某些使用 block 为单位的列强制使用 Kilobytes 为单位。 1 10 表示:数据显示每隔 1 秒刷新一次,共显示 10 次。 x 参数:我们可以获得更多统计信息</code></pre> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/1ac10de710df248f383442546d11c621" alt="" /> 参数含义</p> <pre><code>rrqm/s:每秒进行 merge(多个 IO 的合并)读操作的数量。 wrqm/s:每秒进行 merge(多个 IO 的合并)写操作的数量。 rsec/s:每秒读取的扇区数。 wsec/s:每秒写入的扇区数。 rKB/s:每秒读多少k字节,在 kernel 2.4 以上,rkB/s=2×rsec/s,因为一个扇区为 512 bytes。 wKB/s:每秒写多少k字节,在 kernel 2.4 以上,wkB/s=2×wsec/s,因为一个扇区为 512 bytes。 avgrq-sz:平均请求扇区的大小。 avgqu-sz:是平均请求队列的长度。毫无疑问,队列长度越短越好。 await:每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5 ms,如果大于 10 ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。 svctm:表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢。 %util:在统计时间内所有处理 IO 时间,除以总共统计时间,该参数暗示了设备的繁忙程度,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。</code></pre> <p>系统性能评估标准:</p> </li> </ul> <table> <thead> <tr> <th>影响性能因素</th> <th>好</th> <th>坏</th> <th>糟糕</th> </tr> </thead> <tbody> <tr> <td>磁盘</td> <td>iowait % &lt; 20%</td> <td>iowait % =35%</td> <td>iowait % &gt;= 50%</td> </tr> </tbody> </table> <h2>I/O 性能诊断</h2> <ul> <li> <h4>用 vmstat 命令了解系统状况</h4> <p><code>vmstat 1 10</code> <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/b961d0a3a9de79259ae27bb3498f95d1" alt="" /> 如果 b 的值为 2~3 倍 CPU 数量,bi 和 bo 的值很大(有时 bi 和 bo 值很小,但 in 和 cs 很大,也会引起磁盘 IO 负载重),wa 的值持续很高,如高于 40,id 也持续高于 70,这些现象都表明系统的 IO 可能出现性能问题。</p> </li> <li> <h4>可以进一步通过 iostat 命令分析,如下所示:</h4> <p><code>iostat -x 1 5</code> <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/4eca081ade110dc1432ece2da81ba830" alt="" /> 查看 iostat 的结果时注意事项如下:</p> <pre><code>首先看 %util(服务 IO 的时间占总时间的百分比),如果这个值接近 100%,表示 IO 的请求很多(表示任务服务的所有时间几乎都用在 IO 上),这种现象表明磁盘 IO 性能出现瓶颈。 再看 await(表示每次io设备等待时间)和 svctm(表示每次 IO 设备服务时间,一般性能越好的磁盘,这个值越小)。 如果 svctm 接近 await ,说明 IO 几乎没有等待,每个 IO 设备都得到及时的响应。 如果 svctm 远小于 await ,说明 IO 等待队列可能很长,IO 的得到服务的时间将延长(排队+服务时间)。 avgqu-sz:表示 IO 排队的现象,如果排队过长会影响 IO 的响应时间。 r/s+w/s:可以计算当前系统的 iops(可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的 iops 最大值)。 通过 iostat 了解到如果磁盘 I/O 出现性能瓶颈,我们可以借助 pidstat ,定位出导致瓶颈的进程,分析进程的 I/O 行为,结合应用程序的原理,分析这些 I/O 的来源</code></pre> </li> </ul>

页面列表

ITEM_HTML