0

Linux 3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012 i686 i686 i386 GNU/Linux在 Xen VPS 中使用。

在我运行 Grails java 应用程序之前,运行free -m表明:

             total       used       free     shared    buffers     cached
Mem:          4031        155       3875          0         30         87
-/+ buffers/cache:         37       3994
Swap:         8191          0       8191

运行 Grails 应用程序,执行一些内存密集型处理,并通过 退出Ctrl-C,它表明:

             total       used       free     shared    buffers     cached
Mem:          4031       1031       2999          0         33        957
-/+ buffers/cache:         40       3991
Swap:         8191          0       8191

在重新启动之前似乎不会改变。top并且ps aux不要表示任何大量的内存使用。Grails 应用程序是我在这台机器上运行的唯一应用程序。

也许我误解了这一点,但我担心记忆似乎并没有在退出后释放。通常我会怀疑内存泄漏,但是一旦 java 应用程序被终止,这怎么可能呢?

4

1 回答 1

2

您实际上是在误解命令的输出。

Mem行显示了内核当前分配了多少内存;但是,内核会延迟释放内存。如果没有其他进程正在请求内存,它可能会保留分配的页面(可能是从磁盘读取的内容)。

您看到“干净”已用/空闲内存的-/+ buffers/cache行是您可以看到您的内存使用情况大致相同的行。

你可以在网上找到一些更详细的解释,例如这里

于 2012-08-30T08:42:30.977 回答