日期:2014-05-16  浏览次数:20725 次

?Linux性能检查(二)Memory和IO
Linux性能检查(二)Memory和IO

内存包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分(SWAP)组合在一起作为虚拟内存为计算机提供连贯的虚拟内存空间。
好处是内存变多了,缺点是硬盘读写速度比内存慢很多,并且RAM和SWAP之间的交换增加了系统负担。

在操作系统里,虚拟内存被分成页,在X86系统上每个页大小事4KB。Linux内核读写虚拟内存是以“页”为单位操作的,把内存移动到硬盘交换空间(SWAP)和从交换空间读取到内存都是按页来读写的。内存和SWAP的这种交换过程称为页面交换(Paging),值得注意的是paging和swapping是两个完全不同的概念。swapping在操作系统里是指把某程序完全交换到硬盘以腾出内存给新程序使用,paging只交换程序的部分。

kswapd daemon 用来检查 pages_high 和 pages_low,如果可用内存少于 pages_low,kswapd 就开始扫描并试图释放,并且重复扫描释放的过程直到可用内存大于 pages_high 为止。扫描的时候检查3件事:
1)如果页面没有修改,把页放到可用内存列表里;
2)如果页面被文件系统修改,把页面内容写到磁盘上;
3)如果页面被修改了,但不是被文件系统修改的,把页面写到交换空间。
pdflush daemon 用来同步文件相关的内存页面,把内存页面及时同步到硬盘上。比如打开一个文件,文件被导入到内存里,对文件做了修改后并保存后,内核并不马上保存文件到硬盘,由 pdflush 决定什么时候把相应页面写入硬盘,这由一个内核参数 vm.dirty_background_ratio 来控制,比如下面的参数显示脏页面(dirty pages)达到所有内存页面10%的时候开始写入硬盘。
# /sbin/sysctl -n vm.dirty_background_ratio
10
我的系统是
>/sbin/sysctl -n vm.dirty_background_ratio
5

>vmstat 5
r   b     swpd   free        buff      cache        si   so    bi    bo   in   cs      us   sy  id wa st
1  0     40       1735980 210932 8855852    0    0     0     6    3    1      3     3  94  0  0
1  0     40       1736088 210932 8855852    0    0     0    21    7   1264 10   9  81  0  0

参数解释:
swpd, 已使用的 SWAP 空间大小,KB 为单位;
free,   可用的物理内存大小,KB 为单位;
buff,   物理内存用来缓存读写操作的 buffer 大小,KB 为单位;
cache, 物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;
si,       数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位;
so,      数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位;
bi,       磁盘块从文件系统或 SWAP 读取到 RAM(blocks in)的大小,block 为单位;
bo,     磁盘块从 RAM 写到文件系统或 SWAP(blocks out)的大小,block 为单位;

IO介绍
磁盘通常是最慢的子系统,CPU访问磁盘要设计到机械操作,比如转轴、寻轨等。

查看页面大小的命令:
>/usr/bin/time -v date
Thu Nov 25 14:20:03 CST 2010
        Command being timed: "date"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: ?%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 217
        Voluntary context switches: 1
        Involuntary context switches: 1
        Swaps: 0
        File system inputs