为什么我的系统不释放缓冲区/缓存
问题描述:
我有一个内存饥饿的应用程序。我让它在32GB内存的系统上运行了一个晚上。同时运行free -m -s 20
以查看内存状态如何改变。我的应用程序是我重新启动我的Ubuntu
(除了终端之外)手动启动的唯一的东西。让我们来看看输出部分:为什么我的系统不释放缓冲区/缓存
当应用程序启动:
total used free shared buffers cached
Mem:0 1428 30671 35 69 594
-/+ buffers/cache: 765 31335
Swap: 32693 0 32693
应用程序结束之前:在应用程序结束后
total used free shared buffers cached
Mem:0 31860 240 84 2 17420
-/+ buffers/cache: 14437 17663
Swap: 32693 12 32681
权:
total used free shared buffers cached
Mem:0 18723 13376 84 2 17434
-/+ buffers/cache: 1285 30814
Swap: 32693 12 32681
和许多小时的状态保持不变,直到我早上回来。
我的问题是: 为什么大多数我的记忆中仍然被认为的buffers/cache
一个free
一部分?这部分内存什么时候会再次成为整个Mem:
的free
部分?
我然后打开一个浏览器,一个IDE和其他一些GUI应用程序,看看如何以及从哪里内存分配给新的应用程序:
total used free shared buffers cached
Mem:0 20378 11721 88 160 18075
-/+ buffers/cache: 2143 29956
Swap: 32693 12 32681
显然,无论从Mem:
为可用内存以及buffers/cache:
被分配给新的应用程序。你能为我解释这个吗?
答
缓存的数据也是使用内存的一部分。程序结束后,由程序从磁盘加载的数据将成为缓存的一部分。所以你的系统不会释放任何数据,但如果你的内存需要再次使用,它会删除缓存的数据。 A more or less funny page, that describes the problem.
我觉得我被敦促发布这个链接到Twitter – nodakai 2014-08-28 07:33:13
@TheSlayer我跟着你在你的答案中提到的链接,你是否同意最后一部分? ('我怎么看到我有多少免费内存?')是'缓存/缓存'的'free'专栏我的总空闲内存? – rahman 2014-08-28 09:22:20