Linux性能监视:磁盘IO
盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘是从CPU的最远的距离,和CPU访问磁盘是机械操作,如旋转轴、轨道的发现等等。之间访问硬盘和内存访问是在一个数量级的计算速度的差异,如1和1分钟天之间的差异。监控IO性能,有必要了解其基本原理和Linux是如何处理硬盘和内存之间的IO。内存页
上一次Linux性能监视:内存提到内存和硬盘之间的IO在页面中执行。Linux系统上1页的大小是4K,您可以使用以下命令查看系统的默认页面大小:
$ / usr /斌/时间的日期
…
页面大小(字节):4096
…
页中断
Linux虚拟内存大大扩展程序的地址空间,使得原有的物理内存来保存程序可以继续通过内存和硬盘之间的交流(而不是临时的内存页交换到硬盘内存页从磁盘读入内存)赢得了更多的内存,内存是扩大一样。事实上,这个过程是完全透明的程序。程序不关心它的哪一部分,以及它何时切换到内存。凡事都有内核虚拟内存管理程序启动时,Linux内核首先检查CPU的高速缓存和内存,如果数据被忽略在内存中,如果数据引起页故障不在内存中(Page Fault),然后读取页面从磁盘,和页面缓存的物理内存。一页故障可分为主要的页故障(Major Page Fault)和时间(Minor Page Fault页故障),中断数据从磁盘的页错误读取;数据被读入内存,缓存,从内存缓存而不是直接从硬盘读取数据中断是一个页面故障。
内存缓存到磁盘上面读取内核的作用,以便在物理内存中找到一个页面,如果没有从内存缓存中找到丢失的页面,如果您没有发现它很难读取,显然,额外的内存被带到内存缓冲区以提高访问速度。还有一个命中率问题。如果运气好的话,如果从内存缓冲区读取每一页丢失,将大大提高性能。更大的缓存区,更多的预存的页面,的命中率会更高。以下命令可以用来查看有多少主要分页和分页中断程序第一次启动时产生的:
$ / usr /斌/时间的日期
…
主要(要求I/O)页面错误:1
未成年人(回收框架)页错误:260
…
文件缓存
从上面的内存缓存(也叫文件缓冲区缓存文件缓存)阅读的页面比页面从磁盘中读取要快得多,所以Linux内核希望产生页面错误(从文件缓冲区读取),并可避免主页故障(从磁盘中读取),所以随着时代的一页故障的数量,文件缓存逐渐增加,直到系统只有少量的可用物理内存的Linux开始释放一些无用的页面。我们在linux下运行一段时间后,会发现虽然系统操作程序,但可用内存很小,导致Linux错觉大家低效内存管理,事实上Linux物理内存暂时没有他们做有效的利用(S作为内存缓冲)。以下是VPSee太阳在打印服务器的物理内存和文件缓存:
为猫/ proc /内存信息
MemTotal:8182776 KB
MemFree:3053808 KB
缓冲区:342704 KB
缓存:3972748 KB
此服务器共有8GB的物理内存(MemTotal),3gb(工具),磁盘缓存的内存是343mb(缓冲区),4 GB做文件缓冲区(缓存),可见Linux真的花了很多物理内存做缓存,这个缓存可以提高。
页面类型
Linux内存页面有三种类型:
读取页面、只读页面(或代码页)、由主页中断从硬盘读取的页,包括静态文件、可执行文件、库文件等不能修改的内容。当内核需要它们时,它们被读取到内存中。内存不足时,内核将它们释放到空闲列表中。当程序再次需要它们时,它需要通过分页来再次读取内存。
脏页、脏页,指的是已修改内存中的数据页,如文本文件。这些文件同步到硬盘的pdflush,当内存不足时,将数据写回的kswapd和pdflush硬盘,和内存释放。
匿名页面,匿名页面,属于一个进程,但不与任何文件相关联,不能与硬盘同步。当内存不足时,kswapd负责写他们交换分区和释放内存。
iorsquo;每秒(IOPS)
每一次磁盘IO请求需要花费一定的时间,和访问存储器的时间简直是无法忍受的。在一个典型的1ghz PC 2001,随机磁盘访问一个字8000000纳秒= 8毫秒,为了访问一个字200纳秒;并从存储器访问一个字只有10纳秒。(自学编程:从十年的数据)的硬盘可以提供125 IOPS(1000毫秒8 / MS)。
序列IO和随机IO
IO可分为顺序IO和随机IO两种。在性能监控,有必要找出系统的偏好顺序IO或随机IO的应用。顺序IO是指大量数据请求的同时,如数据库执行大量查询,流媒体服务,等我可以移动大量的数据在同一时间。它可以用来评估IOPS性能,读写IO除以每秒字节数的读写IOPS,RKB / S除以R / S,WKB / W / S所示的连续IO 2秒,每一个可见的IO写数据的增加(45060 / 99 = 455.15 KB每IO,54272 / 112 = 484.57 KB每IO)。相对随机IO,顺序IO应该更注重通过每个IO输入(KB每IO)。
iostat KX 1美元
CPU平均:%USER%好%系统% %闲置%iowait偷
0 0 2.50 25.25 0 72.25
设备:rrqm / / / wrqm R S W / S RKB / / S avgrq avgqu WKB SZ SZ等待svctm %的利用
SDB 24 19995,29,99,4228,45060,770.12,45.01,539.65,7.80,99.80
CPU平均:%USER%好%系统% %闲置%iowait偷
0 0 1 30.67 0 68.33
设备:rrqm / / / wrqm R S W / S RKB / / S avgrq avgqu WKB SZ SZ等待svctm %的利用
SDB 3 12235,3,112,768,54272,957.22,144.85,576.44,8.70,100.10
随机IO是指随机请求数据,IO速度不依赖于数据和次每秒取决于磁盘IO次数排列的大小,如Web服务、邮件服务等各项要求的数据是非常小的,随机IO时每秒钟会有更多每秒请求数,所以磁盘IO次数可以是关键。
iostat KX 1美元
CPU平均:%USER%好%系统% %闲置%iowait偷
1.75 0 0.75 0.25 0 97.26
设备:rrqm / / / wrqm R S W / S RKB / / S avgrq avgqu WKB SZ SZ等待svctm %的利用
SDB 0 52,0,57,0,436,15.30,0.03,0.54,0.23,1.30
CPU平均:%USER%好%系统% %闲置%iowait偷
1.75 0 0.75 0.25 0 97.24
设备:rrqm / / / wrqm R S W / S RKB / / S avgrq avgqu WKB SZ SZ等待svctm %的利用
SDB 0 56.44,0,66.34,0,491.09,14.81,0.04,0.54,0.19,1.29
根据上面的公式:436 57 =每个IO 7.65 KB,每IO 491.09 66.34 = 7.40 KB。和IO序列比较,KB每IO是小到可以忽略不计,可见对于随机IO作为最重要的事情是IOPS的次数,但不是每个IO吞吐量(KB每IO)。
互换
当系统没有足够的物理内存来处理所有请求时,它将使用交换设备。交换设备可以是文件或磁盘分区。但是要小心,使用交换的成本非常昂贵。如果系统没有可用的物理内存,它将频繁交换。如果交换设备和程序在同一文件系统上访问数据,就会遇到严重的IO问题,最终会导致整个系统的延迟甚至崩溃,交换设备和内存之间的交换状态是判断Linux系统性能的重要参考。我们有许多工具来监控交易和交换,如顶,猫/ proc /内存信息,vmstat等等。
为猫/ proc /内存信息
MemTotal:8182776 KB
MemFree:2125476 KB
缓冲区:347952 KB
缓存:4892024 KB
swapcached:112 KB
…
SwapTotal:4096564 KB
SwapFree:4096424 KB
…
vmstat 1美元
过程-----------记忆-------------互换------- IO ------系统------- CPU ------
R B swpd免费buff缓存太Bi Bo在CS
122600082188144682 118242584126642584 134711741400860
212621402964128585 249121730424952 173044737234186100 4