【问题标题】:Java RMI tcp connect memory issueJava RMI tcp 连接内存问题
【发布时间】:2016-08-13 02:02:03
【问题描述】:

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

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

【问题讨论】:

  • 在您的快照中,它是 pool-6-thread-1 消耗所有内容
  • 你的堆直方图怎么样?我们可以给它一个快照吗?
  • 在这种情况下,堆转储也会有所帮助
  • 这是 RMI 服务器吗?还是客户?它是真的空闲还是有出站或入站 RMI 连接?
  • 它的客户端 RMI,我不知道它的创始人,它是庞大代码库的一部分。如何进行堆转储以及如何读取它?

标签: java memory-leaks garbage-collection out-of-memory rmi


【解决方案1】:

我知道这是一篇旧帖子,但由于我偶然发现它遇到了同样的问题,因此答案也可能对其他人有所帮助..

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

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

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多