了解Java内存使用情况

时间:2018-11-15 18:26:47

标签: java memory-leaks gdb jmap hprof

我正在尝试解决tomcat服务器遇到的内存问题,并且我对内存使用有一些疑问。 当我用顶部检查进程内存使用率时,我看到它使用了1Gb物理内存,使用gdb创建了核心转储后,核心文件大小为2.5GB,并且在分析jmap创建的HPROF文件时,它指出使用了240MB。

因此,如果top显示1GB,为什么hprof文件仅显示240MB,而760MB去了哪里?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用-heap:format选项集来运行Jmap? JVM通常在进行转储之前运行GC。

此外,JVM memory不仅仅是堆内存。它包含代码,堆栈,本机方法,直接内存,甚至线程都不是free to use。您可以详细了解here。只要确保看看所有这些是否也加起来即可。

我建议使用 VisualVM yourkit 并比较内存。另外,您正在使用哪个GC?
一些GC通常在增加后通常不收缩堆内存,但是如果GC在堆转储期间被触发,则可能释放了一些内存(请尝试 G1GC