在linux系统中跟踪高IO等待

高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情况:

[[email protected]~]$ 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”。

[[email protected]~]$ 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 ”查看哪些进程在访问这个文件系统,进程列表如下。

[email protected]:/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的价格正在逐步下降。

时间: 2024-07-28 18:39:31

在linux系统中跟踪高IO等待的相关文章

每天进步一点点——Linux系统中的异常堆栈跟踪简单实现

转载请说明出处:http://blog.csdn.net/cywosp/article/details/25002201 在Linux中做C/C++开发经常会遇到一些不可预知的问题导致程序崩溃,同时崩溃后也没留下任何代码运行痕迹,因此,堆栈跟踪技术就显得非要重要了.本文将简单介绍Linux中C/C++程序运行时堆栈获取,首先来看backtrace系列函数--使用范围适合于没有安装GDB或者想要快速理清楚函数调用顺序的情况 ,头文件execinfo.h int backtrace (void **

理解Linux系统中的load average

理解Linux系统中的load average(图文版) 博客分类: Linux linux load nagios 一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount of work that a computer system is doing).也有简单的说是进程队列的长度. Load Average 就是一段时间 (1 分钟.5分钟.15分钟

Linux系统中查看进程和计划任务管理

? 各位小伙伴们大家好,本次给大家带来的是Linux操作系统中的进程和计划任务的管理,首先大家都知道程序是保存在外部存储介质(如硬盘.光盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序,在Linux系统中,每个程序启动后可以创建一个或多个进程.例如:提供Web服务的httpd程序当有大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务.那么接下来我将会从以下几点来告诉大家在Linux的CentOS 7系统中是如何查看进程信息和控制进

Linux系统中数据库启动和关闭&Basic SQL

第一步:使用oracle用户登录 第二步:在oracle用户下输入sqlplus /nolog 第三步:如需使用管理员权限,则输入connect /as sysdba 第四步:启动和关闭 startup startup nomount #只启动实例 startup mount   #打开控制文件 startup open    #打开数据文件和重做日志 shutdown shutdown normal        #不接受新的连接,需要等待所有的用户断开连接 shutdown immediat

理解Linux系统中的load average(图文版)转

一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount of work that a computer system is doing).也有简单的说是进程队列的长度. Load Average 就是一段时间 (1 分钟.5分钟.15分钟) 内平均 Load . 我们可以通过系统命令"w"查看当前load average情况 [[email p

Linux系统中进程的创建

1.Linux中的进程 进程是程序执行的一个实例,也是系统资源调度的最小单位.如果同一个程序被多个用户同时运行,那么这个程序就有多个相对独立的进程,与此同时他们又共享相同的执行代码,在Linux系统中进程的概念类似于任务或者线程(task & threads). 进程是一个程序运行时候的一个实例实际上说的是它就是一个可以充分描述程序以达到了其可以运行状态的的一个数据和代码集合.一个进程会被产生并会复制出自己的子代,类似细胞分裂一样.从系统的角度来看进程的任务实际上就是担当承载系统资源的单位,系统

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

LINUX系统中动态链接库的创建与使用{补充}

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资