2014-08-28 117 views
0

我有一个内存饥饿的应用程序。我让它在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:被分配给新的应用程序。你能为我解释这个吗?

回答

2

缓存的数据也是使用内存的一部分。程序结束后,由程序从磁盘加载的数据将成为缓存的一部分。所以你的系统不会释放任何数据,但如果你的内存需要再次使用,它会删除缓存的数据。 A more or less funny page, that describes the problem.

+0

我觉得我被敦促发布这个链接到Twitter – nodakai 2014-08-28 07:33:13

+0

@TheSlayer我跟着你在你的答案中提到的链接,你是否同意最后一部分? ('我怎么看到我有多少免费内存?')是'缓存/缓存'的'free'专栏我的总空闲内存? – rahman 2014-08-28 09:22:20