性能测试进阶指南——基础篇之磁盘IO
本文旨在帮助测试人员对性能测试常用指标做一个简单的讲解,主要包括CPU、内存、磁盘和网络带宽等系统资源,本文仅仅局限于Linux系统,Windows Server系统暂不做考虑。
使用iostat分析IO性能
对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。
下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。
1.不加选项执行iostat
我们先来看直接执行iostat的输出结果:
[root@10.15.107.147 ~]# iostat
Linux 2.6.18-164.el5 (localhost.localdomain) 05/09/2014 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 0.46 0.00 0.00 99.04
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 5.31 2.98 101.18 4822763 163804574
dm-0 25.39 2.98 101.18 4820813 163804504
dm-1 0.00 0.00 0.00 448 0
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:
- Device: 以sdX形式显示的设备名称
- tps: 每秒进程下发的IO读、写请求数量
- Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
- Blk_wrtn/s: 每秒写扇区数量
- Blk_read: 取样时间间隔内读扇区总数量
- Blk_wrtn: 取样时间间隔内写扇区总数量
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
2.指定采样时间间隔与采样次数
与sar命令一样,我们可以以”iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:
[root@10.15.107.147 ~]# iostat -d 1 2
Linux 2.6.18-164.el5 (localhost.localdomain) 05/09/2014 _x86_64_ (8 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 5.31 2.98 101.18 4822763 163821942
dm-0 25.39 2.98 101.18 4820813 163821872
dm-1 0.00 0.00 0.00 448 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
3.以kB为单位显示读写信息(-k选项)
我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:
[root@10.15.107.147 ~]# iostat -d -k
Linux 2.6.18-164.el5 (localhost.localdomain) 05/09/2014 _x86_64_ (8 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 5.31 2.98 101.18 4822763 163830126
dm-0 25.39 2.98 101.18 4820813 163830056
dm-1 0.00 0.00 0.00 448 0
以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)
4.更详细的io统计信息(-x选项)
为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:
[root@10.15.107.147 ~]# iostat -x -k -d 1
Linux 2.6.18-164.el5 (localhost.localdomain) 05/09/2014 _x86_64_ (8 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
......
cciss/c0d0 0.03 20.05 0.07 5.24 2.98 101.18 39.22 0.00 0.38 2.17 0.36 0.10 0.05
dm-0 0.00 0.00 0.09 25.30 2.98 101.18 8.20 0.02 0.86 2.39 0.86 0.02 0.05
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.16 3.16 0.00 0.30 0.00
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位),这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
svctm: 平均每次IO请求的处理时间(毫秒为单位),如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率,该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
对于以上示例输出,我们可以获取到以下信息:
每秒向磁盘上写101.18KB左右数据(wkB/s值)
每秒有5.31(cciss/c0d0)和25.39(dm-0)次IO操作(r/s+w/s),其中以写操作为主体
平均每次IO请求等待处理的时间为 0.38、0.86、3.16 毫秒,处理耗时为0.10、0.02 和0.30毫秒
等待处理的IO请求队列中,平均有0.00、0.02、0.00个请求驻留
以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (0.07+5.24)*(0.10/1000) = 0.000531
Posted by GaoChuanjun May 9th, 2014
性能测试进阶指南——基础篇之磁盘IO的更多相关文章
- 【转】Spark性能优化指南——基础篇
http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&sn=2f413828d1fdc6a ...
- Spark性能优化指南——基础篇
本文转自:http://tech.meituan.com/spark-tuning-basic.html 感谢原作者 前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一 ...
- Spark性能优化指南——基础篇(转)
[转]Spark性能优化指南——基础篇 http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&am ...
- 【转载】 Spark性能优化指南——基础篇
转自:http://tech.meituan.com/spark-tuning-basic.html?from=timeline 前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能 ...
- Spark性能优化指南——基础篇(转载)
前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...
- Spark性能优化指南——基础篇转
前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...
- Spark性能优化指南--基础篇
前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能复用同一个RDD 原则三:对多次使用的RDD进行持久化 原则四:尽量避免使用shuffle类算子 原则五:使用map-side预聚 ...
- 基于vue2.x的webpack升级与项目搭建指南--基础篇
first thing fitrst 博主声明:绝对不当标题党 有人看最好不过的背景: 十月初对公司产品的前端构建做了一些优化,但还遗留了不少问题(可了解我的前一篇博文:一次webpack小规模优化经 ...
- MySQL 调优基础(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
随机推荐
- 使用Websocket与服务器建立连接
handleMessage = () => { const url = '////'; //某url const token = getCookie('xnToken');//向后端发请求得登陆 ...
- Google - Find minimum number of coins that make a given value
Given a value V, if we want to make change for V cents, and we have infinite supply of each of C = { ...
- C#模拟Https请求时出现 基础连接已经关闭 未能为 SSLTLS 安全通道建立信任关系
//解决方法: //引入命名空间: using System.Security.Cryptography.X509Certificates; using System.Net.Security; // ...
- note 6 函数
函数 完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字 通过函数名执行 数学 function(x) = x^2 - 2x + 1 abs(x) #求x的绝对值 定义函数 定 ...
- [UE4]让箭头保持水平
如图所示,当手柄前后左右转动的时候,箭头也会跟着转动,我们的目标是要求箭头紧贴着地面,不会跟着手柄前后左右转动. 分析上图坐标系可以知道,只要让箭头绕着Z轴转动就可以了,不需要绕着X轴和Y轴旋转.
- 2018-2019-2 20165312《网络攻防技术》Exp5 MSF基础应用
2018-2019-2 20165312<网络攻防技术>Exp5 MSF基础应用 目录 一.知识点总结 二.攻击实例 主动攻击的实践 ms08_067 payload/generic/sh ...
- SYM File
Structure Programme header Section Symbol table Programme header An executable or shared object fil ...
- 卸载npm
npm uninstall npm -g yum remove nodejs npm -y
- 喜怨交加C++
作为被高中理综折磨几年立誓大学不学理工科类的文字爱好者,会学计算机是个意外.出于对理工科的不感兴趣,暑假期间也没有预习过编程知识.在对编程进行学习之前,我将它视为一门科目.一个专业.一项技能,唯独不是 ...
- .net core2.1 配置
ASPNETCORE_ENVIRONMENT Development(开发)Staging(预演)Production(生产) var builder = new ConfigurationBuild ...