linux 性能测试iostat,Linux性能分析之二(iostat)

前言

在之前的博客中我们详细的说明了性能瓶颈的解决思路,也详细介绍了Vmstat的使用,今天我们就详细说说磁盘IO的那些事,磁盘IO是我们最常遇到的瓶颈,下面我们根据iostat详细聊聊磁盘IO

一、磁盘IO性能指标

1.1、每秒IO数(tps)

对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和

1.2、吞吐量( Throughput)

指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。

1.3、磁盘活动时间百分比( Utilization) %util

磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O 完成,因为绝大多数进程在等待过程中将被阻塞或休眠。

1.4、服务时间( ServiceTime) svctm

指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关, CPU/内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过20ms,一般可考虑会对上层应用产生影响。

1.5、I/O 等待队列长度( Queue Length)

指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的 I/O 等待队列长度。

1.6、等待时间( Wait Time)

指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果I/O请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。

二、Iostat详解

2.1、安装iostat命令1yum install sysstat  -y

2.2、iostat参数详解1

2

3

4

5

6

7[root@tshare365 ~]# iostat  --help

Usage: iostat [ options ] [  [  ] ]

Options are:

[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]

[ -j { ID | LABEL | PATH | UUID | ... } [  [...] | ALL ] ]

[  [...] | ALL ] [ -p [  [,...] | ALL ] ]

[root@tshare365 ~]#

我们最常用的是

-C 显示CPU使用情况

-d 显示磁盘使用情况

-x 显示详细信息

-k 以 KB 为单位显示

-m 以 M 为单位显示

2.3、iostat查看服务器IO情况1

2

3

4

5

6

7

8

9

10

11

12

13[root@tshare365 ~]# iostat  -x

Linux 2.6.32-431.el6.x86_64 (tshare365)  02/26/2015     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.03    0.00    0.15    0.04    0.00   99.78

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.21     3.06    0.06    0.22     5.05    26.32   113.45     0.01   48.50   4.05   0.11

scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    0.88   0.88   0.00

dm-0              0.00     0.00    0.26    3.28     4.95    26.32     8.84     1.35  382.60   0.31   0.11

dm-1              0.00     0.00    0.00    0.00     0.03     0.00     8.00     0.00    5.88   1.29   0.00

[root@tshare365 ~]#

cpu属性值说明:%user:CPU处在用户模式下的时间百分比。

%nice:CPU处在带NICE值的用户模式下的时间百分比。

%system:CPU处在系统模式下的时间百分比。

%iowait:CPU等待输入输出完成时间的百分比。

%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

%idle:CPU空闲时间百分比。

备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

disk属性值说明:rrqm/s:  每秒进行 merge 的读操作数目。即 rmerge/s

wrqm/s:  每秒进行 merge 的写操作数目。即 wmerge/s

r/s:  每秒完成的读 I/O 设备次数。即 rio/s

w/s:  每秒完成的写 I/O 设备次数。即 wio/s

rsec/s:  每秒读扇区数。即 rsect/s

wsec/s:  每秒写扇区数。即 wsect/s

rkB/s:  每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

wkB/s:  每秒写K字节数。是 wsect/s 的一半。

avgrq-sz:  平均每次设备I/O操作的数据大小 (扇区)。

avgqu-sz:  平均I/O队列长度。

await:  平均每次设备I/O操作的等待时间 (毫秒)。

svctm: 平均每次设备I/O操作的服务时间 (毫秒)。

%util:  一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,IO响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当前IO在等待。

2.4、查看磁盘的吞吐量1

2

3

4

5

6

7

8

9

10[root@tshare365 ~]# iostat  -d -k

Linux 2.6.32-431.el6.x86_64 (tshare365)  02/26/2015     _x86_64_    (1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

sda               0.28         2.51        13.07     214679    1119426

scd0              0.00         0.00         0.00        132          0

dm-0              3.51         2.46        13.07     210381    1119388

dm-1              0.00         0.01         0.00       1188          0

[root@tshare365 ~]#

tps:该设备每秒的传输次数

kB_read/s:每秒从设备(drive expressed)读取的数据量;

kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

kB_wrtn:写入的总数量数据量;

本博客至此介绍,如有什么问题请留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十六节: EF的CodeFirst模式通过Fluent API修改默认协定

一. 简介 1. 优先级&#xff1a;Fluent API > data annotations > default conventions. 2. 所有的Fluent API配置都要在 OnModelCreating这个重写方法中进行 3. 常见的配置&#xff1a; ① 获取表对应的配置根&#xff1a; var stu modelBuilder.Entity<XXX>(); ②…

安卓手机挂载Linux,android 挂载NFS教程

0&#xff0c;在Ubuntu新建nfs目录:#mkdir /home/shuimu/arm_project/rootfs将FORLINX_6410_yaffs2_v1.0.tgz复制到rootfs中&#xff0c;解压当前文件夹#tar–zxf FORLINX_6410_yaffs2_v1.0.tgz1.烧写mmc&#xff0c;uboot&#xff0c;zImage到开发板。2&#xff0c;在ubuntu上…

linux apache jk,Linux下Apache+Tomcat+JK实现负载均衡和群集的完整过程

感谢chaijunkun的精彩大作&#xff0c;真的辛苦了。最近在开发的项目需要承受很高的并发量。综合各种情况&#xff0c;决定使用ApacheTomcatJK的方式实现负载均衡&#xff0c;并且作为一个统一的服务还要实现群集(同步Session)。在网上找了很多资料&#xff0c;都是零零散散的&…

第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移

一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略&#xff1a; 1. CreateDatabaseIfNotExists&#xff1a;EF的默认策略&#xff0c;数据库不存在,生成数据库&#xff1b;一旦model发生变化,抛异常&#xff0c;提示走数据迁移 2. DropCreateDatabaseIfModelCha…

linux笔记本不关机直接合上,笔记本电脑不关机直接合上行吗

可以。笔记本电脑将盖子合住&#xff0c;对电脑是没有损害&#xff0c;系统的默认设置是合上盖子后电脑处于待机状态。这时电脑的大部分硬件都已经关闭&#xff0c;只有个别硬件为了唤醒计算机仍在运行&#xff0c;但都是低功耗&#xff0c;不浪费电&#xff0c;也不会加快计算…

第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法

一. 简介 该章节&#xff0c;可以说是一个简单轻松的章节&#xff0c;只要你对Expression表达式树、EF的基本使用、泛型有所了解&#xff0c;那么本章节实质上就是一个非常简单的封装章节&#xff0c;便于我们快捷开发。 PS&#xff1a;在该章节对于EF的上下文怎么处理&#xf…

115网盘linux 下载速度慢,linux vps 上 下载115网盘 的方法

大多数童鞋买的vps都是只支持linux系统的&#xff0c;因为版权的问题&#xff0c;windows系统的vps价格上面要贵一些。但是&#xff0c;遇到要下载网盘文件时&#xff0c;没有装桌面只有shell的linux vps就表示压力大了&#xff0c;幸好LV发现一个Linux vps下载115网盘的方法&a…

第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等)

一. 理解并发机制 1. 什么是并发&#xff0c;并发与多线程有什么关系&#xff1f; ①. 先从广义上来说&#xff0c;或者从实际场景上来说. 高并发通常是海量用户同时访问(比如&#xff1a;12306买票、淘宝的双十一抢购)&#xff0c;如果把一个用户看做一个线程的话那么并发可…

利用指针编程实现:删除一个字符串中的所有空格 c语言,C语言必考100题解析汇报...

1.按下述格式&#xff0c;从键盘输入一个整数加法表达式&#xff1a;操作数1操作数2&#xff0c;然后计算并输出表达式的计算结果&#xff0c;形式如下&#xff1a;操作数1操作数2计算结果。2.输入两个整形数并打印&#xff0c;如果用户不慎输入了非法字符&#xff0c;那么程序…

第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新)

一. 简介 1. 背景&#xff1a; 虽然前面EF的扩展插件Z.EntityFramework.Extensions&#xff0c;性能很快&#xff0c;而且也很方便&#xff0c;但是该插件要收费&#xff0c;使用免费版本的话&#xff0c;需要定期更新&#xff0c;如果不更新&#xff0c;将失效&#xff0c;非…

c语言程序设计慕课版答案第6章,C语言程序设计答案黄保和编第6章函数.doc

一、思考题1、函数总需要从main中调用吗&#xff1f;当调用一个函数时&#xff0c;为什么要使用参数&#xff1f;函数不是总需要从main函数中调用&#xff0c;使用参数的目的是为了给被调函数传递数据。2、什么是函数的返回值&#xff1f;是否每个函数都有返回值&#xff1f;为…

c语言程序设计答案万年历备忘录,基于JavaScript(网页脚本语言)编写的万年历(含源文件)...

var i, sum 348for(i0x8000; i>0x8; i>>1) sum (lunarInfo[y-1900] & i)? 1: 0return(sumleapDays(y))}// 传回农历y年闰月的天数function leapDays(y) {if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)else return(0)}// 传回农历y年闰…

第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)和事务隔离级别 :

一. 基本概念 1.共享锁&#xff1a;(holdlock) (1). select的时候会自动加上共享锁&#xff0c;该条语句执行完&#xff0c;共享锁立即释放&#xff0c;与事务是否提交没有关系。 (2). 显式通过添加(holdlock)来显式添加共享锁&#xff08;比如给select语句显式添加共享锁&…

r语言中1c0怎么表示什么,r语言表示或者用什么符号?

犯罪嫌疑人X1、对象名称中的句点(.)没有特殊意义。但美元符号($)却有着和其他语言中的句点类似的含义&#xff0c;即指定一个对象中的某些部分例如&#xff1a;(1)A$x是指数据框A中的变量x。(2)lm.x 指一个变量&#xff0c;lm$x则指对象lm的一个属性。2、 R不提供多行注释或块注…

第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题

一. 开篇说明 EF的性能问题一直以来经常被人所吐槽&#xff0c;究其原因在于“复杂的操作在生成SQL阶段耗时长&#xff0c;且执行效率不高”&#xff0c;但并不是没有办法解决&#xff0c;从EF本身举几个简单的优化例子&#xff1a; ①&#xff1a;如果仅是查询数据&#xff0c…

c语言怎样计算栈的长度,数据结构与算法:栈 C语言实现

栈是仅在表尾进行插入、删除操作的线性表。即栈 S (a1, a2, a3, ………,an-1, an)&#xff0c;其中表尾称为栈顶 /top&#xff0c;表头称为栈底/base。由于只能在表尾进行操作&#xff0c;因此栈的运算规则就是“后进先出”(LIFO)和线性表类似&#xff0c;栈也有两种存储结构—…

WebApi系列(从.Net 到 .Net Core)【更新】

一. 简介 1. 什么是WebApi&#xff1f; WebApi是一个很广泛的概念&#xff0c;在这里我们特指.Net平台下的Asp.Net WebApi框架&#xff0c;它是针对各种客户端(浏览器、APP等)来构建Http服务的一个框架&#xff0c;它是一种RestFul风格的开发接口的技术&#xff0c;它比WebServ…

c语言 有趣的代码,分享一段有趣的小代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#include//数字雨typedef struct{int x, y;char ch;}STU;STU st[5000];//出现位置void gotoxy(int x, int y){HANDLE hout;COORD pos;pos.X x;pos.Y y;hout GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorP…

第一节:WebApi的纯原生态的RestFul风格接口和路由规则介绍

一. 原生态接口 1. 从默认路由开始分析 在WebApiConfig.cs类中的Register方法中&#xff0c;我们可以看到默认路由如下&#xff1a; 分析&#xff1a;请求地址在 controller 前面需要加上 api/&#xff0c;controller后面没有action&#xff0c;最后有一个参数{id}&#xff0c…

复数抽象数据类型C语言,采用C/C++语言如何实现复数抽象数据类型Complex

记录一下&#xff01;采用C/C语言如何实现复数抽象数据类型Complex#include typedef struct Complex{double e1; // 实部double e2; // 虚部}COMPLEX;// 函数声明COMPLEX AssignComplex(double v1, double v2);void DestroyComplex(COMPLEX pc);double GetReal(COMPLEX pc);dou…