【问题标题】:How to fix memory leak from an MQTT app?如何修复 MQTT 应用程序的内存泄漏?
【发布时间】:2017-06-28 17:32:11
【问题描述】:

我有一个使用 paho mqtt 库的应用程序。 我注意到 VisualVM 似乎在我的应用程序中存在内存泄漏。

这里有一些截图:

首先我不明白为什么会有这样的高峰,如果有人能解释一下,我将不胜感激。 然后你可以看到,一开始应用程序以大约 5Mb 的内存开始并以超过 10Mb 的内存结束,我得出的结论是某处存在内存泄漏,对吗?

这是我执行垃圾收集器后的屏幕截图:

您可以看到它恢复到大约 5Mb 的内存,但仍会一次又一次地增长。

我不知道这是否有用,但我截取了一个屏幕截图以了解此内存增长来自哪个线程:

我希望有人能够帮助我。非常感谢!

【问题讨论】:

    标签: java memory-leaks mqtt paho jvisualvm


    【解决方案1】:

    这是Heisenbug。换句话说,you are observing that you are observing(很好地说,我必须链接它)。 JMX 正在消耗内存以通过 RMI 向您发送内存统计信息。如果您想知道您的应用程序真正消耗了多少,请定期查询Runtime.max/total/freeMemory 并将其记录到文件或其他内容中。

    【讨论】:

      【解决方案2】:

      该图看起来像generational garage 收集器的输出,并且没有显示内存泄漏。锯齿是年轻代在工作,基线的增加是将长期存在的数据复制到老年代。

      在触发收集后图表重置为 5mb 的事实是清理老年代并释放从年轻代复制过来的现在未引用的数据。

      【讨论】:

        猜你喜欢
        • 2020-05-25
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多