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/
- 浏览: 2652747 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
发表评论
-
编写内存效率的java代码-面向GC
2014-07-20 12:38 2193参考两个PPT http://www.sl ... -
找到最耗CPU的java线程
2014-04-18 17:25 1813找到最耗CPU的java线程ps命令 命令:ps -mp ... -
故障排除的第一个五分钟
2014-04-15 14:05 1332原文:http://junqili.com/linux/tr ... -
Linux 性能监测总结
2014-04-14 15:22 835Linux 性能监测:介绍Linux 性能监测:MemoryL ... -
java socket远程读取文件性能测试
2014-03-22 00:47 1536为了比较beansdb,写了一个基于socket的java ... -
磁盘性能分析利器-iotop
2014-03-14 10:40 878有时候cpu的iowait很大,但找到瓶颈在哪里,通过iot ... -
Solr性能优化之filterCache
2014-02-27 10:48 950原文:Solr性能优化之filterCache 什么是f ... -
优化Linux下的内核TCP参数来提高服务器负载能力
2014-02-21 14:52 763原文:http://blog.renhao.org/201 ... -
如何提升lucene的索引速度
2014-02-07 21:16 924原文: http://wiki.apache.org/lu ... -
提升磁盘IO性能的几个技巧
2014-02-06 11:29 4486原文:http://www.searc ... -
hbase 写入性能
2014-02-05 16:35 1863hbase单表的平均写入QPS大概在5000-7000 ... -
Exception性能问题
2014-01-24 22:25 13071.从Exception往上介绍相关结构、代码 ... -
java 性能监控
2014-01-15 13:34 930参考:https://github.com/oldratl ... -
hbase scan性能
2013-12-26 18:41 0今天把hbase一个表的数据导到另外一个表,源表大概300 ... -
几种file copy的性能对比
2013-12-16 10:45 1675测试了几种file copy的性能: package m ... -
Linux 性能测试与分析
2013-11-11 16:31 2057本文参考:http://testing. ... -
python,jython 服务器load对比
2013-05-16 23:50 615详细情况见附件 -
并行加载性能对比
2013-01-30 12:14 972今天遇到一个场景,一个很大Bean对象需要执行8条sql来组 ... -
mongoDB的$in性能
2013-01-20 14:41 1649今天发现mongoDB的$in性能不怎么样,24条ID和1条 ... -
freemarker性能问题
2013-01-17 19:48 3377今天对blogDetail性能测试,相比django, i ...
相关推荐
综上所述,定位IO瓶颈需要综合考虑多个层面,包括系统监控、日志分析、硬件状态、存储架构、数据库性能、文件系统、应用程序、资源分配以及云服务特性。通过这些方法,我们可以有效地识别和解决IO瓶颈,提升系统的...
在IT领域,IO瓶颈是系统性能优化中常见的挑战,尤其在大数据处理和数据库管理中。本文档《10个常见触发IO瓶颈的高频业务场景》着重于如何从应用业务层面来解决这一问题,以提高IO效率和降低IO负担。以下是文档内容的...
在性能测试领域,LoadRunner 是一款强大的性能测试工具,它能够帮助我们识别并定位系统中的瓶颈,从而优化系统的性能。本文将围绕LoadRunner中的性能指标,深入探讨如何判断和定位CPU、内存、磁盘和网络等关键资源的...
"内存、线程、IO、网络性能定位方法" PERFORMANCE ISSUE 定位原则和方法 性能问题定位是一项复杂的工作,需要我们从多方面进行分析和研究。下面,我们将从 Memory、Thread、IO、Network 等方面来探讨性能问题的...
redo log文件负责记录所有事务的改变,合理的分布和大小设置可以避免IO瓶颈。 另外,索引策略也会影响IO性能。适当的索引可以加速查询,但过度的索引可能导致写入操作的IO成本增加。DBA需要根据查询模式和数据分布...
通过上述方法,我们可以有效地诊断和解决Oracle数据库服务器的IO性能问题。重要的是,不仅要关注硬件升级或扩展,还需要从软件层面出发,通过优化SQL查询等方式减少不必要的IO操作,从而从根本上改善系统的IO性能。
它提供了实时的IO统计信息,帮助识别IO瓶颈。 #### 不加选项执行iostat 默认情况下,iostat显示自系统启动以来的IO统计摘要,包括总体CPU使用情况和每个磁盘设备的IO活动。关键字段如`iowait`(CPU等待IO完成的...
这款工具的强大之处在于它能够帮助数据库管理员识别和解决可能导致系统瓶颈的I/O问题,从而提升整体系统效率。 Percona Toolkit是由Percona公司开发的一套开源工具集,它包含了一系列用于优化、监控和诊断MySQL和...
高IO查询可能导致服务器响应变慢,影响用户体验,甚至可能导致整个系统的性能瓶颈。为了识别和解决这类问题,我们可以使用一些内置的动态管理视图(DMV)来监控和分析SQL查询的行为。 `sys.dm_exec_query_stats`是...
- **容量规划**:利用Oracle Orion的预测分析能力,合理规划存储资源,确保未来业务增长不会导致IO性能瓶颈。 - **故障排除**:在出现性能问题时,Oracle Orion能够快速定位问题源头,无论是硬件故障、软件配置不当...
本文将围绕“t-io测试工具.rar”这一资源,详细解析其中包含的测试工具及其使用方法,帮助开发者更好地理解和应用t-io。 首先,我们要明确t-io的核心价值在于其对Java NIO(非阻塞I/O)的优化,通过事件驱动模型...
《Python/Linux IO分析代码脚本详解》 在运维工作中,监控Linux服务器的IO性能是至关重要的...它不仅可以帮助我们快速定位IO密集型进程,还可以根据需要调整参数,满足不同场景下的监控需求,是运维工作中的有力工具。
D 如何在solaris下面分析IO瓶颈? E AIX操作系统下,32位进程的最大内存占有情况 F 关于TCP/IP G windows 2003/XP下,一个端口可以多个监听 H Suse9.0下,线程创建的数量和堆内存/永久内存的关系 I JConsole J gc...
在Linux操作系统中,监控磁盘I/O性能是诊断系统瓶颈和优化系统性能的关键步骤。本文将详细介绍三种常用的方法来查看Linux系统的磁盘I/O状况。 首先,我们可以使用`top`命令来初步判断磁盘I/O是否存在高负载。`top`...
1. **设备驱动调试**:通过IO看门狗,可以观察设备驱动程序如何响应来自应用程序的请求,如打开、关闭、读取、写入等操作,这对于发现驱动程序中的错误和性能瓶颈至关重要。 2. **文件系统监控**:了解文件系统的...
1. **实时监控**:DCON能够实时监控系统中的IO操作,提供详细的读写事件记录,帮助开发者了解哪些设备或端口正在频繁活动,有助于发现潜在的性能瓶颈。 2. **数据解析**:对于读写的数据,DCON可以进行解码和解析,...
这些功能可以帮助开发者更直观地了解测试过程中服务器资源的使用情况,从而更好地定位性能瓶颈所在。 #### 四、性能瓶颈分析 通过上述监控手段,可以收集到大量的性能数据。接下来的关键步骤是分析这些数据,找出...
例如,当服务器运行缓慢,可能是因为磁盘I/O瓶颈,这时测试工具可以帮助定位问题。 5. **Windows SERVER 2003和2008支持**: 这两款操作系统都提供了基本的性能监控功能,用户可以通过“管理工具”中的“性能监视器...
而`adu`则专注于磁盘I/O性能,可以监测磁盘的平均利用率,帮助开发者了解系统的I/O瓶颈。 `abu-1.0`工具可能包含了以下功能: 1. **I/O模拟与测试**:它可能允许用户模拟各种I/O操作,例如对硬盘、网络、串口或...