【发布时间】:2011-03-27 23:22:04
【问题描述】:
我们正在运行分析一个 java 程序的内存使用情况。我们有一个 512 ram 的盒子,顶部显示使用了 500 MB 左右的 ram,几乎没有空闲。但是在 RES 列中,我们可以看到 jvm 只使用了 100MB 左右。而所有其他进程甚至都不重要(少于 1k)。那么究竟是什么消耗了所有内存,或者我们只是读错了顶部?
【问题讨论】:
标签: java linux memory-management top-command
我们正在运行分析一个 java 程序的内存使用情况。我们有一个 512 ram 的盒子,顶部显示使用了 500 MB 左右的 ram,几乎没有空闲。但是在 RES 列中,我们可以看到 jvm 只使用了 100MB 左右。而所有其他进程甚至都不重要(少于 1k)。那么究竟是什么消耗了所有内存,或者我们只是读错了顶部?
【问题讨论】:
标签: java linux memory-management top-command
这 500MB 包括页面缓存使用的内存 - 磁盘文件的缓存部分。此内存可回收以供进程使用 - 因此,如果您将列为“空闲”的内存添加到列为“缓存”的内存,那么您将拥有仍可供任务使用的内存。
或者,您可以使用free 命令,该命令将这个数字列在-/+ buffers/cache: 行的“免费”列中。
【讨论】:
此外,多个应用程序(想想动态库)使用的内存在每次被引用时都会被计数,即使它占用一份副本。也可以试试htop。
【讨论】:
这是保留的内存。该进程不使用它,它是为它保留的。如果另一个进程想要分配更多内存,它将获得许可。
【讨论】: