free-查看内存

Linux查看内存(free buffer cache)

来源: http://elf8848.iteye.com/blog/1995638

free输出内容说明

Linux下如何查内存信息,如内存总量、已使用量、可使用量。

经常使用Windows操作系统的朋友,已经习惯了如果空闲的内存较多,心里比较踏实。

当使用Linux时,可能觉的Linux物理内存很快被用光(如频繁存取文件后),当程序结束后内存没有被释放。空闲内存少的可怜,心里总不踏实。

Linux操作系统的内存管理方式与Windows不同,Linux会尽量多的利用内存,让尽可能多的内存参与工作(做cache)以提高性能。

所以你看到的空闲内存总是很小,当你的程序需要更多内存时,Linux系统会把做cache的内存还给你,让你来运行你的程序。

free -m
             total       used       free     shared    buffers     cached
Mem:         15868       7456       8412          0        537       5483
-/+ buffers/cache:       1435      14433
Swap:        32767          0      32767

共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存。

buffers是用来给块设备做的缓冲大小、用来存储目录里面有什么内容、权限等等;

cached用来给文件做缓冲,用来记忆我们打开的文件。

即使你的程序运行结束后,Cache Memory也不会自动释放。

这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存(free)会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。

如果你希望手动去释放Cache Memory也是有办法的。

手动释放缓存

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

#查看默认值
cat /proc/sys/vm/drop_caches

# 先手动执行sync命令,sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
sync

#将/proc/sys/vm/drop_caches值设为3
echo 3 > /proc/sys/vm/drop_caches
cat /proc/sys/vm/drop_caches
3

再来运行free命令。可以看出来有效的释放了buffer和cache。

有关/proc/sys/vm/drop_caches的用法在下面进行了说明:

/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first