使用内存文件系统后系统内存统计方法

【问题描述】

   在Linux系统中,内存可以分出一部分空间作为磁盘来使用,称为Ramdisk。这部分内存空间具有高速读写

特性,可以存储那些对磁盘IO要求较高的数据,显著的提升系统的服务性能。

   Ramdisk分为两种,一种是固定空间大小的空间,跟硬盘分区完全一样,可以格式化并挂载使用;一种是以

内存文件系统tmpfs的形式出现,可以根据需要扩充和缩小。这两种使用方式在kernel 2.4之后都得到了支

持。

   在使用tmpfs时,因为不是一次分配,且对内存分配的形式比较模糊,使得怎样计算系统整体内存使用情况

成为一个问题。

【观察和解决】

   在使用ubuntu系统时,对使用Ramdisk的形式做了简单测试,发现在使用和不使用Ramdisk的时候有奇怪

的问题发生。具体如下:

   内存分区无数据时的情况如下,

   root@peter:~# free -m

                total       used       free     shared    buffers     cached

   Mem:          3851       2222       1629          0         63        847

   -/+ buffers/cache:       1310       2540

   Swap:         1925          0       1925

   root@peter:~# df -h

   Filesystem      Size  Used Avail Use% Mounted on

   /dev/sda3       125G  4.9G  114G   5% /

   udev            1.9G  4.0K  1.9G   1% /dev

   tmpfs           771M  888K  770M   1% /run

   none            5.0M     0  5.0M   0% /run/lock

   none            1.9G  7.4M  1.9G   1% /run/shm

   向内存分区写入1G数据时的情况如下,

   root@peter:/run/shm# dd if=/dev/zero ibs=1M count=1024 of=./test.img

   1024+0 records in

   2097152+0 records out

   1073741824 bytes (1.1 GB) copied, 2.22898 s, 482 MB/s

   root@peter:/run/shm# df -h

   Filesystem      Size  Used Avail Use% Mounted on

   /dev/sda3       125G  4.9G  114G   5% /

   udev            1.9G  4.0K  1.9G   1% /dev

   tmpfs           771M  888K  770M   1% /run

   none            5.0M     0  5.0M   0% /run/lock

   none            1.9G  1.1G  895M  54% /run/shm

   root@peter:/run/shm# free -m

                total       used       free     shared    buffers     cached

   Mem:          3851       3245        605          0         64       1871

   -/+ buffers/cache:       1309       2541

   Swap:         1925          0       1925

   前后数据对比发现主要增加的是cached数据的统计量,而实际使用的内存1309几乎和之前没有变化。可以

大概认为向内存分区中写入的数据实际是增大了cached的统计量。为了进一步说明这个情况,可以释放掉系统

的cached数据

    root@peter:/run/shm# sync; echo "3" > /proc/sys/vm/drop_caches

    root@peter:/run/shm# free -m

                  total       used       free     shared    buffers     cached

    Mem:          3851       2694       1156          0          0       1401

    -/+ buffers/cache:       1292       2558

    Swap:         1925          0       1925

    由于/run/shm分区中实际存储了1.1G的数据,cached并没有被完全使用,可以说明存放到内存分区的

数据实际是在cached的统计数据中。

    最后释放掉内存分区的数据并清理系统缓存后的情况如下

    root@peter:/run/shm# rm -fr test.img

    root@peter:/run/shm# free -m

                  total       used       free     shared    buffers     cached

    Mem:          3851       1676       2174          0          7        370

    -/+ buffers/cache:       1297       2553

    Swap:         1925          0       1925

    root@peter:/run/shm# df -h

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda3       125G  4.9G  114G   5% /

    udev            1.9G  4.0K  1.9G   1% /dev

    tmpfs           771M  888K  770M   1% /run

    none            5.0M     0  5.0M   0% /run/lock

    none            1.9G  7.4M  1.9G   1% /run/shm

    至此,可以发现,在使用​​内存​​分区的系统中,实际使用的内存数据,应该是free -m获得使用内存情况加

上内存区中的数据量,这才是系统真正使用的内存量。

【总结】

    在使用内存文件系统存储数据的系统中,分析内存时要充分的考虑内存文件系统的数据用量,进而准确的

给出系统所使用内存的情况,整体把握系统的资源情况,为进一步的系统分析做准备。