监控--io篇

I/O 监控介绍ios

磁盘I/O 子系统是Linux 系统中最慢的部分.这个主要是归于CPU到物理操做磁盘之间距离(译注:盘片旋转以及寻道).若是拿读取磁盘和内存的时间做比较就是分钟级到秒级,这就像7天和7分钟的区别.所以本质上,Linux 内核就是要最低程度的下降I/O .本章将诉述内核在磁盘和内存之间处理数据的这个过程当中,哪些地方会产生I/O.数据库

读和写数据 - 内存页

Linux 内核将硬盘I/O 进行分页,多数Linux 系统的默认页大小为4K.读和写磁盘块进出到内存都为4K 页大小.你可使用time 这个命令加-v 参数,来检查你系统中设置的页大小:api

root@vmware1:~# /usr/bin/time -v date 缓存

wKiom1NI4Y3jTkgCAACmV8wz5GI116.jpg

Major and Minor Page Faults(译注:主要页错误和次要页错误)app

Linux,相似多数的UNIX 系统,使用一个虚拟内存层来映射硬件地址空间.当一个进程被启动,内核先扫描CPU caches和物理内存.若是进程须要的数据在这2个地方都没找到,就须要从磁盘上读取,此时内核过程就是major pagefault(MPF).MPF 要求磁盘子系统检索页并缓存进RAM.dom

一旦内存页被映射进内存的buffer cache(buff),内核将尝试从内存中读取或写入,此时内核过程就是minor pagefault(MnPF).与在磁盘上操做相比,MnPF 经过反复使用内存中的内存页就大大的缩短了内核时间.ide

如下的例子,使用time 命令验证了,当进程启动后,MPF MnPF 的变化状况.第一次运行进程,MPF 会更多:函数

wKioL1NI4gWy3oA3AACyVSI3_DA044.jpg

第二次再运行时,内核已经不须要进行MPF,由于进程所需的数据已经在内存中:工具

wKiom1NI4kDx-clVAACXkoSHMH4630.jpg


The File Buffer Cache(译注:文件缓存区)

文件缓存区就是指,内核将MPF 过程最小化,MnPF 过程最大化.随着系统不断的产生I/O,buffercache也将不断的增长.直到内存不够,以及系统须要释放老的内存页去给其余用户进程使用时,系统就会丢弃这些内存页.结果是性能

如下例子,是查看/proc/meminfo 文件

wKioL1NI4ijhsg80AACd-LcP928485.jpg


能够看出,这个系统总计有2GB(Memtotal)的可用内存.当前的空闲内存为52MB (MemFree),24 MB内存被分配磁盘写操做(Buffers),还有1.7 GB页用于读磁盘(Cached).

内核这样是经过MnPF机制,而不表明全部的页都是来自磁盘.经过以上部分,咱们不可能确认系统是否处于瓶颈中.


Type of Memory Pages

Linux 内核中,memory pages3,分别是:


1,Read Pages - 这些页经过MPF 从磁盘中读入,并且是只读.这些页存在于Buffer Cache中以及包括不可以修改的静态文件,二进制文件,还有库文件.当内核须要它们时,将读取到内存中.若是内存不足,内核将释放它们回空闲列表中.程序再次请求时,则经过MPF 再次读回内存.


2,Dirty Pages - 这些页是内核在内存中已经被修改过的数据页.当这些页须要同步回磁盘上,pdflush 负责写回磁盘.若是内存不足,kswapd (pdflush 一块儿)将这些页写回到磁盘上并释放更多的内存.


3,AnonymousPages - 这些页属于某个进程,可是没有任何磁盘文件和它们有关.他们不能和同步回磁盘.若是内存不足,kswapd 将他们写入swap 分区上并释放更多的内存(swapping pages).

Writing Data Pages Back to Disk

应用程序有不少选择能够写脏页回磁盘上,可经过I/O 调度器使用 fsync() sync() 这样的系统函数来实现当即写回.若是应用程序没有调用以上函数,pdflush 进程会按期与磁盘进行同步.

#ps -ef | grep pdflush

root 186 6 0 18:04 ? 00:00:00 [pdflush]


监控 I/O

当以为系统中出现了I/O瓶颈时,可使用标准的监控软件来查找缘由.这些工具包括了top,vmstat,iostat,sar.它们的输出结果一小部分是很类似,不过每一个也都提供了各自对于性能不一样方面的解释.如下章节就将讨论哪些状况会致使I/O 瓶颈的出现.

Calculating IOs Per Second(译注:IOPS 的计算)

每一个I/O 请求到磁盘都须要若干时间.主要是由于磁盘的盘边必须旋转,机头必须寻道.磁盘的旋转经常被称为”rotationaldelay”(RD),机头的移动称为”disk seek”(DS).一个I/O 请求所需的时间计算就是DS加上RD.磁盘的RD 基于设备自身RPM 单位值(译注:RPM 是Revolutions Perminute的缩写,是转/每分钟,表明了硬盘的转速).一个RD 就是一个盘片旋转的

半圆.如何计算一个10K RPM设备的RD 值呢:

1.10000 RPM / 60 seconds (10000/60 = 166 RPS)

2.转换为 166分之1 的值(1/166 =0.006 seconds/Rotation)

3.单位转换为毫秒(6 MS/Rotation)

4.旋转半圆的时间(6/2 = 3MS) 也就是 RD

5.加上平均3 MS 的寻道时间 (3MS + 3MS = 6MS)

6.加上2MS 的延迟(6MS + 2MS = 8MS)

7.1000 MS / 8 MS (1000/8 = 125 IOPS)

每次应用程序产生一个I/O,在10K RPM磁盘上都要花费平均 8MS.在这个固定时间里,磁盘将尽量且有效率在进行读写磁盘.IOPS 能够计算出大体的I/O 请求数,10K RPM 磁盘有能力提供120-150 次IOPS.评估IOPS 的效能,可用每秒读写I/O 字节数除以每秒读写IOPS 数得出.

Random vs Sequential I/O(译注:随机/顺序 I/O)

per I/O产生的KB 字节数是与系统自己workload相关的,有2种不一样workload的类型,它们是sequential和random.

4.2.2.1. Sequential I/O(译注:顺序IO)

iostat 命令提供信息包括IOPS 和每一个I/O 数据处理的总额.可以使用iostat-x 查看.顺序的workload是同时读顺序请求大量的数据.这包括的应用,好比有商业数据库(database)在执行大量的查询和流媒体服务.在这个workload 中,KBper I/O 的比率应该是很高的.Sequential workload 是能够同时很快的移动大量数据.若是每一个I/O 都节省了时间,那就意味了能带来更多的数据处理.

wKiom1NI4mbjDqG_AAGLyRKC-uU136.jpg

评估IOPS 的效能,可用每秒读写I/O 字节数除以每秒读写IOPS 数得出,好比:

rkB/s 除以 r/s
wkB/s
除以 w/s

53040/105 =505KB per I/O

71152/102 =697KB per I/O

在上面例子可看出,每次循环下,/dev/sda per I/O 都在增长

4.2.2.2. Random I/O(译注:随机IO)

Random的worklaod环境下,不依赖于数据大小的多少,更多依赖的是磁盘的IOPS 数.Web和Mail 服务就是典型的Random workload.I/O 请求内容都很小.Random workload是同时每秒会有更多的请求数产生.因此,磁盘的IOPS 数是关键.

wKioL1NI4lHAHDLBAAHSL1KQyoY812.jpg

计算方式和以前的公式一致:

2640/102 = 23KB per I/O
3176/130 = 24KB per I/O

(译注:对于顺序I/O来讲,主要是考虑读取大量数据的能力即KB per request.对于随机I/O系统,更须要考虑的是IOPS值)


When Virtual Memory Kills I/O

若是系统没有足够的RAM 响应全部的请求,就会使用到SWAP device.就像使用文件系统I/O,使用SWAP device 代价也很大.若是系统已经没有物理内存可用,那就都在SWAP disk上建立不少不少的内存分页,若是同一文件系统的数据都在尝试访问SWAP device,那系统将遇到I/O 瓶颈.最终致使系统性能的全面崩溃.若是内存页不可以及时读或写磁盘,它们就一直保留在RAM中.若是保留时间过久,内核又必须释放内存空间.问题来了,I/O操做都被阻塞住了,什么都没作就被结束了,不可避免地就出现kernel panic和system crash.

下面的vmstat 示范了一个内存不足状况下的系统:

wKiom1NI4ojyWYXkAAFJutmhllc894.jpg

这个结果可看出,大量的读请求回内存(bi),致使了空闲内存在不断的减小(free).这就使得系统写入swap device的块数目(so)和swap 空间(swpd)在不断增长.同时看到CPU WIO time(wa)百分比很大.这代表I/O 请求已经致使CPU 开始效率低下.

要看swaping 对磁盘的影响,可以使用iostat 检查swap 分区

wKioL1NI4myDlLAWAADKWl56LxA210.jpg

在这个例子中,swap device(/dev/sda1) 和file system device(/dev/sda3)在互相做用于I/O. 其中任一个会有很高写请求(w/s),也会有很高wait time(await),或者较低的服务时间比率(svctm).这代表2个分区之间互有联系,互有影响.

结论

I/O 性能监控包含了如下几点:

1.当CPU 有等待I/O 状况时,那说明磁盘处于超负荷状态.

2.计算你的磁盘可以承受多大的IOPS 数.

3.肯定你的应用是属于随机或者顺序读取磁盘.

4.监控磁盘慢须要比较wait time(await) 和 service time(svctm).

5.监控swap 和系统分区,要确保virtualmemory不是文件系统I/O 的瓶颈.

相关文章
相关标签/搜索