Linux系统监控之磁盘I/O篇[Linux安全]
本文“Linux系统监控之磁盘I/O篇[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
磁盘I/O 子系统是Linux 系统中最慢的部份.这个主如果归于CPU到物理操作磁盘之间距离(译注:盘片旋转以及寻道).假如拿读取磁盘和内存的时间作对比就是分钟级到秒级,这就像7天和7分钟的辨别.因此本质上,Linux 内核就是要最低程度的降低I/O 数.本章将诉述内核在磁盘和内存之间处理数据的这个历程中,哪些地方会产生I/O.
6.1 读和写数据 - 内存页
Linux 内核将硬盘I/O 举行分页,大都Linux 系统的默许页大小为4K.读和写磁盘块收支到内存都为4K 页大小.你可以利用time 这个号令加-v 参数,来查抄你系统中设置的页大小:
# /usr/bin/time -v date
Page size (bytes): 4096
6.2 Major and Minor Page Faults(译注:主要页错误和次要页错误)
Linux,近似大都的UNIX 系统,利用一个虚拟内存层来映射硬件地址空间.当一个进程被启动,内核先扫描CPU caches和物理内存.假如进程需求的数据在这2个地方都没找到,就需求从磁盘上读取,此时内核历程就是major page fault(MPF).MPF 要求磁盘子系统检索页并缓存进RAM.
一旦内存页被映射进内存的buffer cache(buff)中,内核将尝试从内存中读取或写入,此时内核历程就是minor page fault(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
6.3 The File Buffer Cache(译注:文件缓存区)
文件缓存区就是指,内核将MPF 历程最小化,MnPF 历程最大化.随着系统不断的产生I/O,buffer cache也将不断的增添.直到内存不够,以及系统需求释放老的内存页去给其他用户进程利用时,系统就会丢弃这些内存页.后果是,很多sa(译注:系统管理员)对系统中过少的free memory(译注:闲暇内存)表示耽忧,实际上这是系统更高效的在利用caches.
以下例子,是查看/proc/meminfo 文件:
# cat /proc/meminfo
MemTotal: 2075672 kB
MemFree: 52528 kB
Buffers: 24596 kB
Cached: 1766844 kB
可以看出,这个系统总计有2GB (Memtotal)的可用内存.当前的闲暇内存为52MB (MemFree),有24 MB内存被分配磁盘写操作(Buffers),还有1.7 GB页用于读磁盘(Cached).
内核这样是通过MnPF机制,而不代表全部的页都是来自磁盘.通过以上部份,我们不大概确认系统能否处于瓶颈中.
6.4 Type of Memory Pages
在Linux 内核中,memory pages有3种,辨别是:
1,Read Pages - 这些页通过MPF 从磁盘中读入,并且是只读.这些页存在于Buffer Cache中以及包含不可以改正的静态文件,二进制文件,还有库文件.当内核需求它们时,将读取到内存中.假如内存不足,内核将释放它们回闲暇列表中.程序再次恳求时,则通过MPF 再次读回内存.
2,Dirty Pages - 这些页是内核在内存中已经被改正过的数据页.当这些页需求同步回磁盘上,由pdflush 负责写回磁盘.假如内存不足,kswapd (与pdflush 一同)将这些页写回到磁盘上并释放更多的内存.
3,Anonymous Pages - 这些页属于某个进程,但是没有任何磁盘文件和它们有关.他们不能和同步回磁盘.假如内存不足,kswapd 将他们写入swap 分区上并释放更多的内存("swapping" pages).
6.5 将数据页写回磁盘
利用程序有很多挑选可以写脏页回磁盘上,可通过I/O 调度器利用 fsync() 或 sync() 这样的系统函数来实现当即写回.假如利用程序没有调用以上函数,pdflush 进程会按期与磁盘举行同步.
# ps -ef | grep pdflush
root 186 6 0 18:04 ? 00:00:00 [pdflush]
以上是“Linux系统监控之磁盘I/O篇[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |