`
blueswind8306
  • 浏览: 124566 次
  • 来自: ...
社区版块
存档分类
最新评论

定位IO瓶颈的一些方法

阅读更多
IO瓶颈往往是我们可能会忽略的地方(我们常会看top、free、netstat等等,但经常会忽略IO的负载情况),今天给大家详细分享一下如何确认一台服务器的IO负载是否到达了瓶颈,以及可能优化、定位的点。

先来看一台典型的IO密集型服务器的cpu统计图:

可以看到,CPU总使用率不高,平均1.3%,max到5.6%,虽然大部分都耗在了iowait上,但才百分之五左右,应该还没到瓶颈吧???
错了!这里要特别注意:iowait≠IO负载,要看真实的IO负载情况,一般使用iostat –x 命令
$ iostat –x 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.04    0.00    0.04    4.99    0.00   94.92

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    81.00 104.00  4.00 13760.00   680.00   133.70     2.08   19.29   9.25  99.90
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5              0.00    81.00 104.00  4.00 13760.00   680.00   133.70     2.08   19.29   9.25  99.90

这里重点指标是svctm和util这两列,man一下可以看到如下解释:
svctm
       The average service time (in milliseconds) for I/O requests that were issued to the device.
%util
       Percentage  of  CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.

可以看到,svctm指的是“平均每次设备I/O操作的服务时间 (毫秒)”,而util指的是“一秒中I/O 操作的利用率,或者说一秒中有多少时间 I/O 队列是非空的。”
我们这里发现util已经接近100%,结合man的说明“Device saturation occurs when this value is close to 100%”可以知道其实目前这台服务器的IO已经到达瓶颈了。

那为什么最前面的cpu统计图的iowait项只有5.5%左右呢?因为这个iowait(也就是top里的wa%)指的是从整体来看,CPU等待IO的耗时占比:
wa -- iowait
Amount of time the CPU has been waiting for I/O to complete.
也就是说,CPU可能拿出一部分时间来等待IO完成(iowait),但从磁盘的角度看,磁盘的利用率已经满了(util%),这种情况下,CPU使用率可能不高,但是系统整体QPS已经上不去了,如果加大流量,会导致单次IO耗时的继续增加(因为IO请求都堵在队列里了),从而影响系统整体的处理性能。

确认了IO负载过高后,可以使用iotop工具具体查看IO负载主要是落在哪个进程上了。

那如何规避IO负载过高的问题呢?具体问题具体分析:
1. 如果你的服务器用来做日志分析,要避免多个crontab交叠执行导致多进程随机IO(参考:随机IO vs 顺序IO),避免定期的压缩、解压大日志(这种任务会造成某段时间的IO抖动)。
2. 如果是前端应用服务器,要避免程序频繁打本地日志、或者异常日志等。
3. 如果是存储服务(mysql、nosql),尽量将服务部署在单独的节点上,不要和其它服务共用,甚至服务本身做读写分离以降低读写压力;调优一些buffer参数以降低IO写的频率等等。另外还可以参考LevelDB这种将随机IO变顺序IO的经典方式。

参考资料:
http://oplinux.com/order/iostat.html
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

  • 大小: 30.5 KB
分享到:
评论

相关推荐

    定位系统IO瓶颈

    如何判断,整个IT环境的瓶颈是否出现在IO瓶颈上 

    嵌入式系统/ARM技术中的如何解决虚拟环境存储I/O瓶颈问题

    事实上,当很难获得利润的时候,解决存储I/O性能瓶颈在经济疲软时变得更加重要。  对于数据中心来说,虚拟环境下的存储I/O瓶颈是一个不断加重且长期存在的问题,因为存储控制器和头设备会被虚拟机发出的大量I/O请求...

    Java问题定位技术.pdf

    D 如何在solaris下面分析IO瓶颈? E AIX操作系统下,32位进程的最大内存占有情况 F 关于TCP/IP G windows 2003/XP下,一个端口可以多个监听 H Suse9.0下,线程创建的数量和堆内存/永久内存的关系 I JConsole J gc...

    性能测试瓶颈定位——磁盘IO和线程切换过多

     2、了解了一下后台实现逻辑:大体是这样的:服务器接到请求后,会再到另一台kv服务器请求数据,拿回来数据后,根据用户的机器码做个性化运算,最后将结果返回给客户端,期间会输出一些调试log。  查了下,kv...

    MySQL服务器 IO 100%的分析与优化方案

    而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看CPU、内存使用情况,然后在排查IO问题,例如网络IO、磁盘IO的问题。 如果是磁盘IO问题,一般问题是SQL语法问题、MYSQL...

    oracle IO调优

    oracle 磁盘性能问题定位,磁盘瓶颈原因及如何调优

    简单了解Linux性能监控命令free

    在系统遇到各种IO瓶颈,内存使用率高,cpu使用率高等问题时,我们如何来定位错误?linux提供了很多命令来协助我们快速定位到错误,free命令是Linux最常用的命令之一:它可以查看系统的内存状况,包括服务器的总内存...

    SQLServer2008查询性能优化 2/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

    SQLServer2008查询性能优化 1/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

    【闲说】性能测试

    那么,就趁着这次性能测试的机会,重新梳理下对linux,网络IO等基本功的认识已经就性能瓶颈的定位分享下自己的心得。 本次性能测试的目的是测试使用公司内部RPC框架开发的一套接口的性能,目的是准确的拿到接口的...

    Loadrunner报错日志

    程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中...

    Toad 使用快速入门

    可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,...

    loadrunner测试资料

    这两个软件的功能虽然强大,并且可以自动生成测试报告,但其终究是一个工具,如果你想真正的定位服务器性能的好坏和性能的瓶颈所在,需要使用工具的人对于测试软件的方方面面都要有了解,比如软件体系构架,网络拓扑...

Global site tag (gtag.js) - Google Analytics