I/O检测介绍
I/O性能监测可总结如下:
* 任何时间出现CPU等待IO,说明磁盘超载。
* 计算出你的磁盘可维持的IOPS值。
* 判定你的应用是属于随机磁盘访问型还是有序型。
* 通过对比等待时间和服务时间即可判断磁盘是否缓慢。
* 监测交换空间和文件系统坐在分区并确保他们之间不存在争抢IO。
磁盘IO子系统是linux系统里最慢的部分,这是由于其与CPU相比相去甚远,且依赖于物理式工作(转动和检索)。如果将读取磁盘和读取内存所花费的时间转换为分秒,那么他们之间的差距是7天和7分钟,所以linux内核尽量少的进行磁盘操作是至关重要的。以下部分将描述下内核处理数据从磁盘到内存和从内存到磁盘的不同方式。
数据读写——内存页面
linux内核将磁盘IO分为页面进行操作,大多数linux系统中默认页面大小为4K,即以4K为单位进行磁盘和内存间的读写操作。我们可以使用time命令来查找页面大小:
# /usr/bin/time -v date
......
Page size (bytes): 4096
......
主要页错误(Major Page Faults)和次要页错误(Minor Page Faults)
linux和大多数UNIX系统一样,使用虚拟内存层来映射物理地址空间,这种映射在某种意义上是说当一个进程开始运行,内核仅仅映射其需要的那部分,内核首先会搜索CPU缓存和物理内存,如果没有找到内核则开始一次MPF,一次MPF即是一次对磁盘子系统的请求,它将数据页从磁盘和缓存读入RAM。
一旦内存页被映射到高速缓冲区,内核便会试图使用这些页,被称作MnPF,MnPF通过重复使用内存页而缩短了内核时间。
在下面示例中,time命令显示了当一个程序启动的时候产生了多少MPF和MnPF,在第一次启动的时候产生了很多MPF:
# /usr/bin/time -v evolution
......
Major (requiring I/O) page faults: 163
Minor (reclaiming a frame) page faults: 5918
......
第二次启动的时候MPF消失因为程序已经在内存中:
# /usr/bin/time -v evolution
......
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 5581
......
文件缓冲区
文件缓冲区可使内核减少对MPFs和MnPFs的使用,随着系统不断地IO操作,缓冲区会随之增大,直至内存空闲空间不足并开始回收,最终结果是系统管理员们开始关心这个事实,但这只是系统正在很好的使用缓冲空间而已。
下面的输入来自/proc/meminfo文件:
# cat /proc/meminfo
MemTotal: 2075672 kB
MemFree: 52528 kB
Buffers: 24596 kB
Cached: 1766844 kB
......
以上显示系统拥有2G内存,当前有52MB空闲空间,24MB的buffer供应磁盘写操作,1.7GB的cache由磁盘读入内存。
内核通过MnPF机制来使用这些东东,光这些数据还不足以说明系统出现瓶颈。
内存页面分类
在linux内核中有3种内核页:
* 读取页面——从磁盘读入(MPF)的只读页面,这些页面存在于缓冲区中包括不可改变的静态文件,二进制文件和库文件。内核会因需求而不断地将他们读入内存,如果内存变得不够用,内核会将他们“窃取”至空闲列表,这将导致某个应用通过MPF将它们重新加载至内存。
* 脏页面——在内存中被内核修改的页面,它们将被pdflush守护进程回写至磁盘,当内存不够用时,kswapd进程也会和pdflush一道进行回写以释放更多内存空间。
* 无名页面——它们属于某个进程,但是没有任何文件或后端存储与之关联,它们不能被回写进磁盘,当内存不够用时kswapd守护进程会将它们写入交换空间直至RAM释放出来。
数据页面磁盘回写
应用可能直接调用fsync()或sync()系统调用将脏页面回写入磁盘,这些系统调用会直接请求至I/O调度器。如果一个应用不调用它们,则pdflush守护进程会时不时地进行页面回写操作。
监测磁盘I/O
在一定条件下系统会出现I/O瓶颈,可由很多监测工具监测到,如top,vmstat,iostat,sar等。这些工具输入的信息大致一样,也有不同之处,下面将讨论出现I/O瓶颈的情况。
计算每秒IO量
每一次向磁盘的IO请求都会花费一定时间,这主要是因为磁盘必须旋转,磁头必须检索。磁盘的旋转通常被称为“旋转延迟(rotational delay)”(RD),磁头的移动杯称为“磁盘检索(disk seek)”(DS)。因此每次IO请求的时间由DS和RD计算得来,磁盘的RD由驱动气的转速所固定,一RD被为磁盘一转的一半,计算一块10000转磁盘的RD如下:
1. 算出每转的秒数:60秒/10000转 = 0.006秒/转
2. 转换为毫秒: 0.006*1000毫秒 = 6毫秒
3. 算出RD值: 6/2 = 3毫秒
4. 加上平均检索时间:3+3 = 6毫秒
5. 加上内部转移等待时间: 6+2 = 8毫秒
6. 算出一秒的IO数:1000毫秒/8毫秒 = 125次/秒(IOPS)
在一块万转硬盘上应用每请求一次IO需要8毫秒,每秒可提供120到150次操作。
随机IO和有序IO
每次IO的数据量与系统的工作负荷相关。系统的负荷分两类:有序和随机。
有序IO
iostat命令可提供IOPS值和每次IO的数据量,有序负荷需要一次有序地读取大量数据,因此每次IO的数据量很大,其性能取决于短时间大数据量的执行能力。
计算IOPS能力的方式是用每秒读写数据量除以每秒读写次数:
53040/105 = 505 KB/IO
71152/102 = 697 KB/IO
随机IO
随机负荷与数据大小关系不大,与磁盘的IOPS值有关,web服务,mail服务一般属于此类,IO请求相对较少,其依赖于一次可执行多少次请求,因此磁盘的IOPS值非常关键。
此数据与刚才的数据相比每次IO写入的数据量差异很大:
2640/102 = 23 KB/IO
3176/130 = 24 KB/IO
当虚拟内存终结I/O时
假如系统没有足够的内存供给所有的请求时,并开始使用交换空间,和文件系统IO一样swap的写入也很慢,假如内存严重的不足,那么这可能导致大量的页面涌向swap,假如这个swap空间与要写入的文件处于同一文件系统下,此系统将进入IO争抢,这将导致系统性能直线下降。假如页面无法读或写入磁盘,那么它们将一直停留于内存中,内核会开始尝试释放内存空间,问题是IO通道已经严重阻塞且无法做任何事情,这必将导致系统内核出错并崩溃。
下面的vmstat输出展示了这种情况:
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
17 0 1250 3248 45820 1488472 30 132 992 0 2437 7657 23 50 0 23
11 0 1376 3256 45820 1488888 57 245 416 0 2391 7173 10 90 0 0
12 0 1582 1688 45828 1490228 63 131 1348 76 2432 7315 10 90 0 10
12 2 3981 1848 45468 1489824 185 56 2300 68 2478 9149 15 12 0 73
14 2 10385 2400 44484 1489732 0 87 1112 20 2515 11620 0 12 0 88
14 2 12671 2280 43644 1488816 76 51 1812 204 2546 11407 20 45 0 35
以上数据显示大量的读入内存请求(bi),内存不够,导致数据块不停写入(so)交换空间,交换空间大小不断增长(swpd),同样也出现了大量的IO等待时间(wa),这表明CPU因为IO请求的原因而开始变慢。
在上面的例子中,swap设备(/dev/sda1)和文件系统(/dev/sda3)在争抢IO。
判定应用IO使用
iotop命令显示每个进程的IO使用情况,其输出结果与top命令相似,可与iostat命令结合来判断产生IO瓶颈的应用。
在下面的示例中,在同一磁盘上(sda2)既有读操作(r/s)又有写操作(w/s):
# iostat –x 1
avg-cpu: %user %nice %system %iowait %steal %idle
7.14 0.00 35.71 57.14 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 123.47 25.51 987.76 21951.02 153.97 27.76 224.29 6.85 102.04
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 0.00 0.00 123.47 25.51 987.76 21951.02 153.97 27.76 224.29 6.85 102.04
#iotop -d 5 -P
Total DISK READ: 981.23 K/s | Total DISK WRITE: 21.43 M/s
PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
2574 be/4 root 967.01 K/s 0.00 B/s 0.00 % 39.05 % find /
64 be/3 root 0.00 B/s 19.94 M/s 0.00 % 13.09 % smbd -D
2533 be/4 dhoch 3.63 K/s 8.72 K/s 0.00 % 1.82 % [kjournald]
2442 be/4 root 0.00 B/s 2.91 K/s 0.00 % 0.46 % iostat -x 1
2217 be/4 dhoch 0.00 B/s 1488.57 B/s 0.00 % 0.00 % mono /usr~-ior-fd=25
1985 be/4 dhoch 0.00 B/s 255.12 K/s 0.00 % 0.00 % smbd -D
iotop的DISK READ 和DISK WRITE 与iostat的rsec/s 和wsec/s 相对应。
I/O检测介绍的更多相关文章
- 结合Python代码介绍音符起始点检测 (onset detection)
本文由 meelo 原创,请务必以链接形式注明 本文地址 音符起始点检测介绍 音符起始点检测(onset detection)是音乐信号处理中非常重要的一个算法.节拍和速度(tempo)的检测都会基于 ...
- 第九节、人脸检测之Haar分类器
人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来. 目前人脸检测的方法主 ...
- Stanford机器学习---第十一讲.异常检测
之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...
- networkcomms 相关文章(转载)
介绍开源的.net通信框架NetworkComms框架之一 首字节验证 介绍开源的.net通信框架NetworkComms框架之二 传递类 介绍开源的.net通信框架NetworkComms框架之三 ...
- 王家林 大数据Spark超经典视频链接全集[转]
压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- 100本最棒的web前端图书推荐
前端技术,要学习的内容太多了,当你不知道从哪里开始的时候,你就先从看书开始,边看书边码代码,这个是学习编程必须的过程,因为你看一百遍,还不如自己写一遍,写一遍,第一可以加印象,第二便于更好的理解. 熟 ...
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
摘要:本Demo使用YOLOv3_Resnet18模型来检测的视频流中的行人,获取行人坐标(即图中蓝色方框),然后计算所有检测到的人之间的相互"距离". 前情提要 听到行人社交距离 ...
随机推荐
- python 异常处理(五)
异常处理&异常基类 1.处理异常 try.....except 语法: 1) try: 放可能会出现问题的代码 except: 处理错误的方式 例如: try: print(ab) #无错执 ...
- Python 面向对象Ⅲ
Python内置类属性 __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块http ...
- Anaconda 安装+使用+换源+更新
anaconda官网下载安装:https://www.continuum.io/downloads/ anaconda用法:查看已经安装的包:pip list 或者 conda list 安装和更新: ...
- Spring MVC 的 multipartResolver 不能同iWebOffice2006 共同使用
转:http://jamesby.iteye.com/blog/57381 项目使用iWebOffice2006,本来可以正常使用,但是系统有文件上传需求,故定义了一个multipartResolve ...
- Python天天学_03_基础三
Python_day_03 金角大王: http://www.cnblogs.com/alex3714/articles/5740985.html ------Python是一个优雅的大姐姐 学习方式 ...
- 一组相关联的问题:“sudo: unable to resolve host ###: Connection timed out”、软件启动速度超慢、IPv6无法使用
造冰箱的大熊猫@cnblogs 2018/9/15 近日陆续发现计算机出现几个问题,最终发现这些问题实际上是由同一个原因导致的 问题1:无法使用IPv6 问题2:无论是启动Emacs GUI还是在命令 ...
- 一些简单题(1)(Source : NOIP历年试题+杂题)
最近也写了些许题目吧,还是写写博客,捋捋思路. P2216 [HAOI2007]理想的正方形 求一个$a \times b(a,b \leq 10^3)$的矩阵,求出一个$n \times n (n ...
- 论文阅读:NETFPGA SUME: TOWARD 100 GBPS AS RESEARCH COMMODITY
摘要: 数据中心网络的需求增长意味着许多组成技术不在研究社区的预算之内. NETFPGA SUME是基于FPGA的PCI Express板,具有I / O功能,可作为网络接口卡,多端口开关,防火墙或测 ...
- 浏览器使用小tip
谷歌浏览器截取长图 很多网页长图单个页面截不下来,那么需要如何解决? 首先,在谷歌浏览器chrome中打开需要截图的网页,等待需要截图的网页打开完毕,然后按F12 打开开发者工具,然后按组合键 Ctr ...
- JavaWeb-SpringBoot_使用H2数据库实现用户注册登录
使用Gradle编译项目 传送门 前端资源同:使用MySQL数据库实现用户管理_demo 传送门 H2:SpringBoot内置持久化数据库 使用H2数据库实现用户注册登录 用户可以在index.h ...