Linux服务器I/O性能分析-1
一、IOSTAT误区
1.1 误区-svctm
Linux上的svctm是重要的I/O指标(I/O平均服务时间-单位毫秒),这个值直接反映了硬件的性能(I/O请求从SCSI层发出--->I/O完成之后返回SCSI层所消耗的时间),要是这个值很大的话,那肯定是硬件出问题了,但是Linux系统对他的解释却有点出乎意料:
man iostat
......
The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this fieldany more. This field will be removed in a future sysstat version.
......
# 说白了就是这个值已经不权威了,将来sysstat包中他就没了(找谁说理去)
1.2 误区-await
虽然说I/O平均消耗时间(毫秒)是用await表示的,但是这个值也不能说明硬件的性能(那我要你干什么,就是不行呗),经过研究后发现await不仅包括硬件设备处理I/O时间,还包括了在请求队列里面的时间,排队时间又不是硬件设备消耗的,那凭什么硬件要背锅;所以这个值也不能全信,也有可能是内核驱动I/O调度器(/sys/block/sda-z/queue/scheduler)的时候导致这个值变大了。问题来了,这也不能信那也不能信,我信你妹啊,到底怎么弄?答案是:想要分析真正的原因就别指望它了
二、被骗后的反思
2.1 文件:/proc/diskstats
要真正理解I/O输出结果,应该看这个文件(一次没看懂就看二次三次四次.....关机)
cat /proc/diskstats
8 0 sda 12600 81 692064 28041 32735156 176165 2096398965 1926343 0 800601 1948300
8 1 sda1 428 0 6250 1329 12 1 29 0 0 161 1329
8 2 sda2 616 0 11438 137 119 0 32452 5 0 113 142
8 3 sda3 11468 81 669992 26550 32735025 176164 2096366484 1926338 0 800359 1946760
8 16 sdb 0 0 0 0 0 0 0 0 0 0 0
2.1.1 字段解释
8 1 sda1 428 0 6250 1329 12 1 29 0 0 161 1329
| 字段序列 | 字段值 | 字段含义 |
| 1 | 8 | SCSI设备寻址地址 |
| 2 | 1 | 设备编号 |
| 3 | sda1 | 设备名称 |
| 4 | 428 | 成功完成的读取总数 |
| 5 | 0 | 合并读取操作的次数-单独讲解-详见如下序列5 |
| 6 | 6250 | 成功读取的扇区数 |
| 7 | 1329 | 所有读取数据花费的总毫秒数 |
| 8 | 12 | 完成写入的次数 |
| 9 | 1 | 合并写入的次数 |
| 10 | 29 | 成功写入的扇区总数 |
| 11 | 0 | 写入磁盘块所花费的毫秒数 |
| 12 | 0 | 当前正在进行的I/O数量,这个数量是I/O进入队列时进行++的,还没到磁盘 |
| 13 | 161 | I/O花费的毫秒数(读消耗的时间+写消耗的时间) |
| 14 | 1329 | 执行I/O的加权毫秒数-单独讲解-详见如下序列14 |
2.1.2 字段解释
- 字段序列5:
合并读取操作的次数,就是要是一个应用读取的数据块相邻时,可以合并成一个,这样能提高效率(调度器负责合并),官方文档翻译:两次4K读取可能先变为一次8K读取,最终移交给磁盘,因此将被计数(并排队),仅作为一个I/O。该字段使您知道执行此操作的频率。
- 字段序列14:
执行I/O的加权毫秒数,该字段在每次I/O开始,I/O完成,I/O时递增,通过进行中的I/O数量合并或读取这些统计信息(字段9)乘以自I/O以来花费的毫秒数,该字段的最新更新。这样可以轻松衡量,I/O完成时间和可能积压的积压。
三、对IOSTAT的看法
3.1 概述
iostat是以/proc/diskstats为基础进行计算的,因为它没有把队列等待时间和硬盘处理时间分开计算,所以凡是一些计算I/O的工具要是以这个文件为基础的话,那取出的数据都不准确!
3.2 iostat字段解释
iostat -x
......
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.02 0.00 3.08 0.03 98.52 64.04 0.00 0.06 2.23 0.06 0.02 0.01
# rrqm/s : 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
# wrqm/s : 每秒对该设备的写请求被合并次数
# r/s : 每秒完成的读次数
# w/s : 每秒完成的写次数
# rkB/s : 每秒读数据量(kB为单位)
# wkB/s : 每秒写数据量(kB为单位)
# avgrq-sz : 平均每次IO操作的数据量(扇区数为单位)
# avgqu-sz : 平均等待处理的IO请求队列长度
# await : 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
# r_await : 每个读操作平均所需的时间(不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间。)
# w_await : 每个写操作平均所需的时间(不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间。)
# svctm : 平均每次IO请求的处理时间(毫秒为单位)
# %util : 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
下一节继续分享如何正确分析I/O性能
Linux服务器I/O性能分析-1的更多相关文章
- Linux服务器I/O性能分析-2
一.如何正确分析IO性能 1.1 BLKTRACE分析IO性能 之前的文章已经说明,要是系统发生I/O性能问题,我们常用的命令是无法精确定位问题(内核I/O调度器消耗的时间和硬件消耗的时间,这个不能作 ...
- Linux服务器I/O性能分析-3
一.通过脚本分析IO的读/写数量.最大延迟.延迟的分布情况.块大小及数量 #!/bin/sh # # File Name : count_io.sh # Time : 2020-07-29-11:24 ...
- Linux服务器的那些性能参数指标
Linux服务器的那些性能参数指标 一个基于Linux操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要, ...
- x86服务器中网络性能分析与调优 转
x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 ...
- 转 Linux日志文件系统及性能分析
日志文件系统可以在系统发生断电或者其它系统故障时保证整体数据的完整性,Linux是目前支持日志文件系统最多的操作系统之一,本文重点研究了Linux常用的日志文件系统:EXT3.ReiserFS.XFS ...
- linux下常见的性能分析工具
转载于:http://bian5399.blog.51cto.com/3848702/834715 性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效 ...
- Linux服务器挂死案例分析
问题现象: 在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以.这够崩溃的吧? 问题分析过程 ...
- 服务器病了吗? Linux 服务器的那些性能参数指标
一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...
- Linux 服务器的那些性能参数指标
一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...
随机推荐
- Scrum Meeting 10
第10次例会报告 日期:2021年05月30日 会议主要内容概述: 目前组员均无暇软工,进展较慢. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公 ...
- 技术博客--微信小程序canvas实现图片编辑
技术博客--微信小程序canvas实现图片编辑 我们的这个小程序不仅仅是想给用户提供一个保存和查找的平台,还希望能给用户一个展示自己创意的舞台,因此我们实现了图片的编辑部分.我们对对图片的编辑集成了很 ...
- js 原型链详解
目录 构造函数和实例 属性Prototype 属性__proto__ 访问原型上的方法 构造函数也有__proto__ 构造函数的原型也有__proto__ Object.prototype这个原型对 ...
- js fetch异步请求使用详解
目录 认识异步 fetch(url) response.json() 结合async和await 异常处理 post请求 认识异步 首先我们得明白请求是一个异步的过程. 因为请求需要时间向服务器发送请 ...
- [转]浅谈电路设计中应用DDR3处理缓存问题
本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...
- Python NameError: name 'unicode' is not defined
Python2 的unicode 函数在 Python3 中被命名为 str.在 Python3 中使用 ·str 来代替 Python2 中的 unicode.
- 【数据结构&算法】05-线性表之数组
目录 前言 线性结构与非线性结构 数组 数组的两个限制 数组的随机访问特性 数组的操作 插入操作 删除操作 数组越界 容器 数组下标 前言 本笔记主要记录数组的一些基础特性及操作. 顺便解答下为什么大 ...
- linux运维思想
1.安装部署某个服务或者研究某个知识点时,宁可花大量时间,也需要尽量将该服务搞透,后续再遇到相关问题时你会发现这为你节省的时间将远远比你当时花的时间多. 2.安装部署时,做好记录,发本地记录并发表博文 ...
- 全程精髓无废话,腾讯强推Redis深度笔记我粉了
作为目前主流的NoSQL技术,redis在Java互联网中得到了非常广泛的使用,个时代码代码的秃头人员,对Redis肯定是不陌生的,如果连Redis都没用过,还真不好意思出去面试,指不定被面试官吊打多 ...
- macos proxy_bypass_macosx_sysconf exception
macos, 在rpc调用request请求时,在proxy_bypass_macosx_sysconf 无法返回 解决方法: import requests session = requests.S ...