在linux系统中跟踪高IO等待
原文作者:Jon Buys
原文地址:http://ostatic.com/blog/tracking-down-high-io-wait-in-linux
译者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。
跟踪大型分布式系统的性能问题,从本质上来讲是复杂的。应用为什么慢?瓶颈在哪里?以我的经验,最主要的罪魁祸首之一是高IO等待(即high IO wait)。换一个地方用Dr.
Seuss的话来说:每个人都只是在等待[翻译参考文献1]。
高IO等待问题的第一个征兆通常是系统平均负载。负载均衡的计算都是基于CPU利用率的,即使用或等待CPU的进程数目,当然,在Linux平台上,进程几乎都处于不可中断的睡眠状态。负载均衡的基线可以解释为,在一个CPU核的机器上上,该CPU得到充分利用。因此,对于4核机器中,如果系统平均复杂为4,表示该机器有足够的资源来处理它需要做的工作,当然只是勉强。在相同的4核系统,如果平均复杂是8,那么以为这将意味着服务器系统需要8个core才能处理所要做的工作,但现在只有4个核,所以已经超载。
如果系统显示平均负载较高,但是CPU的系统(system)和用户(user)利用率较低,那么就需要观察IO等待(即IO
wait)。在linuc系统上,IO wait对系统负载有较大的影响,主要因为一个或多个核都可能被磁盘IO或网络IO所阻塞,只有当磁盘IO或网络IO完成后,这些核上的任务(即进程)才能进行下去。而这些进程使用ps
aux来查看均处于”D”状态,即不可中断的睡眠状态。
发现进程在等待IO完成是一回事,验证高IO wait的原因是另一回事。使用”iostat –x 1”能够显示正在使用的物理存储设备的IO情况:
[username@server~]$ iostat -x 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
cciss/c0d0 0.08 5.94 1.28 2.75 17.34 69.52 21.60 0.11 26.82 4.12 1.66
cciss/c0d0p1 0.00 0.00 0.00 0.00 0.00 0.00 5.30 0.00 8.76 5.98 0.00
cciss/c0d0p2 0.00 0.00 0.00 0.00 0.00 0.00 58.45 0.00 7.79 3.21 0.00
cciss/c0d0p3 0.08 5.94 1.28 2.75 17.34 69.52 21.60 0.11 26.82 4.12 1.66
由上可知,很明显,设备/dev/cciss/c0d0p3的等待时间很长。然而,我们并没有挂载找个设备,实际上,它是个LVM设备。如果您使用的是LVM作为存储,那么,您应该发现iostat应该有那么一点混乱。LVM使用device
mapper子系统将文件系统映射到物理设备,因此,iostat可能显示多个设备,比如/ dev/dm-0和/ dev/dm-1。而”df
–h”的输出却不会显示device mapper路径,而是打印了LVM路径。最简单的方法是在iostat参数中添加选项”-N”。
[username@server~]$ iostat -xN 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
vg1-root 0.00 0.00 0.09 3.01 0.85 24.08 8.05 0.08 24.69 1.79 0.55
vg1-home 0.00 0.00 0.05 1.46 0.97 11.69 8.36 0.03 19.89 3.76 0.57
vg1-opt 0.00 0.00 0.03 1.56 0.46 12.48 8.12 0.05 29.89 3.53 0.56
vg1-tmp 0.00 0.00 0.00 0.06 0.00 0.45 8.00 0.00 24.85 4.90 0.03
vg1-usr 0.00 0.00 0.63 1.41 5.85 11.28 8.38 0.07 32.48 3.11 0.63
vg1-var 0.00 0.00 0.55 1.19 9.21 9.54 10.74 0.04 24.10 4.24 0.74
vg1-swaplv 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.98 1.88 0.00
为简便起见,裁剪上面iostat命令的输出信息。列出的每个文件系统所显示出的IO等待都是不可接受的,观察第十栏标有“await”的数据。相比而言,文件系统/usr的await时间要高一些。我们先来分析一下这个文件系统,使用命令”
fuser -vm /opt ”查看哪些进程在访问这个文件系统,进程列表如下。
root@server:/root > fuser -vm /opt
USER PID ACCESS COMMAND
/opt: db2fenc1 1067 ....m db2fmp
db2fenc1 1071 ....m db2fmp
db2fenc1 2560 ....m db2fmp
db2fenc1 5221 ....m db2fmp
当前服务器上有112个DB2进程正在访问/opt文件系统,为简便起见,列出四项。看来已经找到导致问题的原因,在服务器上,数据库配置为可使用速度更快的SAN访问,操作系统可以使用的是本地磁盘。可以打电话问问DBA(数据库管理员)怎么做才能这样配置。
最后一个组要的注意的是LVM和device mapper。 “Iostat –xN”命令的输出显示的是逻辑卷名,但它是可以通过命令”ls –lrt / dev /mapper”查到映射关系表。输出信息的第六列中的dm-是与iostat中的设备名相对应的。
有时候,在操作系统或应用层是没有什么可以做的,除了选择速度更快的磁盘,并没有其他的选择。幸运的是,快速磁盘访问,如SAN或SSD的价格正在逐步下降。
最后一个需要注意的,具体问题具体分析。您需要深刻了解您能的环境,包括物理环境,虚拟环境和应用层架构,这样才能便于诊断问题。如果有其他方法或方式来解决这类问题,我很想听听这些意见。
翻译参考文献 [1] http://www.goodreads.com/quotes/376564-waiting-for-the-fish-to-bite-or-waiting-for-wind “Waiting for the fish to bite or waiting for wind to fly a kite. Or waiting around for Friday night or waiting perhaps for their Uncle Jake or a pot to boil or a better break or a string of pearls or a pair of pants or a wig with curls or another chance. Everyone is just waiting.”----------------------------------------初次翻译,不足之处,请不吝赐教----------------------------------------
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。
在linux系统中跟踪高IO等待的更多相关文章
- linux:关于Linux系统中 CPU Memory IO Network的性能监测
我们知道:系统优化是一项复杂.繁琐.长期的工作.通常监测的子系统有以下这些:CPUMemoryIO Network 下面是常用的监测工具 Linux 系统包括很多子系统(包括刚刚介绍的CPU,Memo ...
- linux系统中的进程状态分析
转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...
- 理解Linux系统中的load average
理解Linux系统中的load average(图文版) 博客分类: Linux linux load nagios 一.什么是load average? linux系统中的Load对当前CPU工作 ...
- 用户管理 之 Linux 系统中的超级权限的控制
在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...
- 理解Linux系统中的load average(图文版)转
一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount ...
- Linux系统中的load average(平均负载/运行队列)
1.load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的 ...
- linux系统中的一些典型问题汇总
一.文件系统破坏导致系统无法启动:Checking root filesystem/dev/sda6 contains a file system with errors,check forcedAn ...
- Linux 系统中僵尸进程
Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...
- [转]理解Linux系统中的load average
转自:http://heipark.iteye.com/blog/1340384 谢谢,写的非常好的文章. 一.什么是load average linux系统中的Load对当前CPU工作量的度量 (W ...
随机推荐
- Solr DateRangeField
Solr DateRangeField 是solr5.0 实现的一个feature. 关于 DateRangeField 支持日期查询如 date_field:[2016-03-23 TO 2017 ...
- H5 Canvas vs. SVG
HTML 5 Canvas vs. SVG HTML5 SVG HTML5 地理定位 Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XM ...
- 使用Intellij Idea自定义MVC框架
---恢复内容开始--- 今天我学习了自定义一个简单的MVC框架,这个我们首先要知道什么是MVC框架! MVC框架: MVC全名是Model View Controller,是模型(model)-视图 ...
- .Net编译运行原理
.Net Framework: 它是框架库和运行时的集合 ( FCL, Framework Class Library ) ( CLR, Common Language Runtime ) 不严格说它 ...
- ZooKeeper的简单理解
1 ZooKeeper的一致性特点 概念 描述 备注 顺序一致性 以ZXID来保证事务的顺序性 原子性 以ZAB保证原子操作,要么成功,要么失败 单一视图 无论客户端从哪个服务器获取到关于应用的数据都 ...
- 防火墙之netfailt、iptables详解
[TOC] Iptables入门 # 1.iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为 ...
- centos6.7搭建DHCP服务器
centos6.7搭建DHCP服务 2017-03-24 09:47:16 系统环境: centos6.7 安装之前首先使用rpm –qa | grep dhcp查看系统中是否已安装了dhcp软件包. ...
- ruby安装sass报错解决办法
ERROR: Could not find a valid gem 'sass' (>= 0), here is why: Unable to download data from http:/ ...
- Linux之wc命令
wc - print newline, word, and byte counts for each file 为文件打印行数,字符数,字节数 参数: -l 仅列出行 -w 仅列出多少字(英文单字 ...
- Windbg调试中遇到的问题
1.找不到符号文件 抓取完Dump后,打开WinDbg,Ctrl+D找到刚才抓取的Dump文件,报如下异常: *** ERROR: Symbol file could not be found. De ...