Java RMI tcp connect memory issue

我有一个问题,我可以在探查器中找到,但我不知道如何解决它。加载应用程序后,我得到这个锯齿波模式,程序处于空闲状态但消耗内存,正如您在这里看到的那样。

memory allocation in time

当我检查采样器线程内存分配时,我看到RMI TCP连接到我的eth0(172.16.20.51)以每秒半兆字节(413,213)消耗内存,这导致生产记录“停止世界”GC:-(sampler thread memory我无法跟踪此问题的原因,因为我不知道它是哪个线程的哪个端口,另一方面,我试图用-com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false flags运行我的jar,但它没有帮助。任何想法都将不胜感激。


答案 1

我知道这是一篇老文章,但是由于我偶然发现了同样的问题,所以答案也可能对其他人有所帮助。

RMI TCP 连接线程是虚拟虚拟机对内存使用情况进行采样的方式。因此,高分配字节/秒是您在分析时希望看到的,并且(不一定)表明您的应用程序存在任何问题。例如,请参阅此 SO 问题

关于堆转储,Visual VM 在“监视器”和“采样器”选项卡中有一个“堆转储”按钮,该按钮将保存堆转储文件。例如,您可以将其加载到免费的Eclipse Memory Analyzer(MAT)中以检查内存泄漏等。


答案 2

推荐