`
san_yun
  • 浏览: 2662980 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

定位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/ 

分享到:
评论

相关推荐

    定位系统IO瓶颈

    综上所述,定位IO瓶颈需要综合考虑多个层面,包括系统监控、日志分析、硬件状态、存储架构、数据库性能、文件系统、应用程序、资源分配以及云服务特性。通过这些方法,我们可以有效地识别和解决IO瓶颈,提升系统的...

    10个常见触发IO瓶颈的高频业务场景.doc

    在IT领域,IO瓶颈是系统性能优化中常见的挑战,尤其在大数据处理和数据库管理中。本文档《10个常见触发IO瓶颈的高频业务场景》着重于如何从应用业务层面来解决这一问题,以提高IO效率和降低IO负担。以下是文档内容的...

    Loadrunner性能指标定位系统瓶颈

    在性能测试领域,LoadRunner 是一款强大的性能测试工具,它能够帮助我们识别并定位系统中的瓶颈,从而优化系统的性能。本文将围绕LoadRunner中的性能指标,深入探讨如何判断和定位CPU、内存、磁盘和网络等关键资源的...

    内存,线程,io,网络性能定位方法

    "内存、线程、IO、网络性能定位方法" PERFORMANCE ISSUE 定位原则和方法 性能问题定位是一项复杂的工作,需要我们从多方面进行分析和研究。下面,我们将从 Memory、Thread、IO、Network 等方面来探讨性能问题的...

    Oracle IO问题解析

    redo log文件负责记录所有事务的改变,合理的分布和大小设置可以避免IO瓶颈。 另外,索引策略也会影响IO性能。适当的索引可以加速查询,但过度的索引可能导致写入操作的IO成本增加。DBA需要根据查询模式和数据分布...

    Oracle数据库服务器IO高的分析方案.docx

    通过上述方法,我们可以有效地诊断和解决Oracle数据库服务器的IO性能问题。重要的是,不仅要关注硬件升级或扩展,还需要从软件层面出发,通过优化SQL查询等方式减少不必要的IO操作,从而从根本上改善系统的IO性能。

    生产系统主机io性能分析指南

    它提供了实时的IO统计信息,帮助识别IO瓶颈。 #### 不加选项执行iostat 默认情况下,iostat显示自系统启动以来的IO统计摘要,包括总体CPU使用情况和每个磁盘设备的IO活动。关键字段如`iowait`(CPU等待IO完成的...

    pt-ioprofile

    这款工具的强大之处在于它能够帮助数据库管理员识别和解决可能导致系统瓶颈的I/O问题,从而提升整体系统效率。 Percona Toolkit是由Percona公司开发的一套开源工具集,它包含了一系列用于优化、监控和诊断MySQL和...

    sql 高 IO 开销的查询

    高IO查询可能导致服务器响应变慢,影响用户体验,甚至可能导致整个系统的性能瓶颈。为了识别和解决这类问题,我们可以使用一些内置的动态管理视图(DMV)来监控和分析SQL查询的行为。 `sys.dm_exec_query_stats`是...

    关于IO性能的测试工具

    - **容量规划**:利用Oracle Orion的预测分析能力,合理规划存储资源,确保未来业务增长不会导致IO性能瓶颈。 - **故障排除**:在出现性能问题时,Oracle Orion能够快速定位问题源头,无论是硬件故障、软件配置不当...

    t-io测试工具.rar

    本文将围绕“t-io测试工具.rar”这一资源,详细解析其中包含的测试工具及其使用方法,帮助开发者更好地理解和应用t-io。 首先,我们要明确t-io的核心价值在于其对Java NIO(非阻塞I/O)的优化,通过事件驱动模型...

    python Linux-IO分析代码脚本.docx

    《Python/Linux IO分析代码脚本详解》 在运维工作中,监控Linux服务器的IO性能是至关重要的...它不仅可以帮助我们快速定位IO密集型进程,还可以根据需要调整参数,满足不同场景下的监控需求,是运维工作中的有力工具。

    Java问题定位技术.pdf

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

    linux查看磁盘io的几种方法.docx

    在Linux操作系统中,监控磁盘I/O性能是诊断系统瓶颈和优化系统性能的关键步骤。本文将详细介绍三种常用的方法来查看Linux系统的磁盘I/O状况。 首先,我们可以使用`top`命令来初步判断磁盘I/O是否存在高负载。`top`...

    WINCE下好用的IO调试工具IO看门狗

    1. **设备驱动调试**:通过IO看门狗,可以观察设备驱动程序如何响应来自应用程序的请求,如打开、关闭、读取、写入等操作,这对于发现驱动程序中的错误和性能瓶颈至关重要。 2. **文件系统监控**:了解文件系统的...

    鸿格 IO 调试工具 Dcon

    1. **实时监控**:DCON能够实时监控系统中的IO操作,提供详细的读写事件记录,帮助开发者了解哪些设备或端口正在频繁活动,有助于发现潜在的性能瓶颈。 2. **数据解析**:对于读写的数据,DCON可以进行解码和解析,...

    jmeter监控CPU&Memer;&IO;流程

    这些功能可以帮助开发者更直观地了解测试过程中服务器资源的使用情况,从而更好地定位性能瓶颈所在。 #### 四、性能瓶颈分析 通过上述监控手段,可以收集到大量的性能数据。接下来的关键步骤是分析这些数据,找出...

    磁盘IO占用测试工具

    例如,当服务器运行缓慢,可能是因为磁盘I/O瓶颈,这时测试工具可以帮助定位问题。 5. **Windows SERVER 2003和2008支持**: 这两款操作系统都提供了基本的性能监控功能,用户可以通过“管理工具”中的“性能监视器...

    Linux下IO读写工具abu-1.0

    而`adu`则专注于磁盘I/O性能,可以监测磁盘的平均利用率,帮助开发者了解系统的I/O瓶颈。 `abu-1.0`工具可能包含了以下功能: 1. **I/O模拟与测试**:它可能允许用户模拟各种I/O操作,例如对硬盘、网络、串口或...

Global site tag (gtag.js) - Google Analytics