您的位置:首页 > 运维架构 > Linux

关于Linux的缓存内存 Cache Memory详解

2015-04-16 20:50 411 查看
PS:为啥我的Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Windows的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory

有时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,此时查看系统的 /proc/meminfo 文件,会发现有一项 Cached Memory:

输入cat /proc/meminfo查看:

MemTotal: 16425996 kB

MemFree: 5698808 kB

Buffers: 380904 kB

Cached: 9389356 kB

SwapCached: 212 kB

Active: 6569200 kB

Inactive: 3725364 kB

HighTotal: 0 kB

HighFree: 0 kB

LowTotal: 16425996 kB

LowFree: 5698808 kB

SwapTotal: 8273464 kB

SwapFree: 8273252 kB

Dirty: 980 kB

Writeback: 0 kB

AnonPages: 524108 kB

Mapped: 24568 kB

Slab: 381776 kB

PageTables: 7496 kB

NFS_Unstable: 0 kB

Bounce: 0 kB

CommitLimit: 16486460 kB

Committed_AS: 2143856 kB

VmallocTotal: 34359738367 kB

VmallocUsed: 267656 kB

VmallocChunk: 34359469303 kB

HugePages_Total: 0

HugePages_Free: 0

HugePages_Rsvd: 0

Hugepagesize: 2048 kB


free命令里各项内存指标说明:

total used free shared buffers cached

Mem: 16425996 10727220 5698776 0 380904 9389832

-/+ buffers/cache: 956484 15469512

Swap: 8273464
212 8273252


其中第一行用全局角度描述系统使用的内存状况:

total——总物理内存

used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存

free——完全未被使用的内存

shared——应用程序共享内存

buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)

cached——缓存,用于已打开的文件

总结:

total=used+free

used=buffers+cached (maybe add shared also)

第二行描述应用程序的内存使用:

前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值

后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值

总结:

-buffers/cache=used-buffers-cached

+buffers/cache=free+buffers+cached

第三行表示swap的使用:

used——已使用

free——未使用

什么是Cache Memory(缓存内存):

当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory也是有办法的。

如何释放Cache Memory(缓存内存):

用下面的命令可以释放Cache Memory:

To free pagecache:

echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

echo 3 > /proc/sys/vm/drop_caches


注意,释放前最好sync一下,防止丢失数据。

#sync (该命令将未写的系统缓冲区写到磁盘中。包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。)

总结:个人经验认为没必要手动释放,这种内存管理方式也是比windows优胜的地方之一!因为Linux的内核内存管理机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以提高文件以及磁盘的读写速度。

drop_cache的详细文档如下,以便查阅(摘自:http://www.linuxidc.com/Linux/2010-03/24939.htm

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

To free pagecache:

* echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

* echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

* echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first
in order to make sure allcached objects are freed.

This tunable was added in 2.6.16.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: