java进程使用的内存比堆所使用内存大很多

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

19129 root 20 0 12.178g 4.843g 16380 S 23.3 31.2 1236:44 java

linux下,使用top命令,查看到进程占用内存4.843g,但是通过jmap查看堆内存,只使用了不到2G,如下图:

而且这个进程所使用的内存会一直增加,直到服务器内存100%,最后无法提供服务。。。请问这种情况怎么排查是什么原因导致的这个问题


回答:

2031MB + 4096MB 这都6G了……
加参数oom的时候dump,或者发现不对的时候去dump,然后用mat分析一下哪里出现了内存泄漏


回答:

jmap看不到直接内存和其他原生内存的使用,可以使用NMT查看是否是堆外哪块内存占用特别大。


回答:

检查下是否有创建大量线程或使用直接内存,这些通过jmap看不到。可以参考这篇文章最后的perf工具https://blog.csdn.net/weixin_30646537/article/details/114598261

以上是 java进程使用的内存比堆所使用内存大很多 的全部内容, 来源链接: utcz.com/p/944475.html

回到顶部