在Xen VPS中使用Linux 3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012 i686 i686 i386 GNU/Linux
。
在运行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应用程序被终止,这怎么可能呢?
答案 0 :(得分:2)
您实际上是误解了命令的输出。
Mem
行显示内核当前分配的内存量;但是,内核懒洋洋地释放内存。如果没有其他进程请求内存,它可能会保留已分配的页面(可能是从磁盘读取的内容)。
您看到“干净”使用/可用内存的行是-/+ buffers/cache
行,您可以在其中看到您的内存使用情况大致相同。
您可以在网上找到更详细的说明,例如: here