2017-02-10 64 views
1

我有一个使用paho mqtt库的应用程序。 我注意到VisualVM中,似乎有我的应用程序中的内存泄漏。如何解决MQTT应用程序的内存泄漏问题?

下面是一些截图:enter image description here所有的

首先我不understant为什么有这样的一些峰值,如果有人能解释我这一点,我将不胜感激。 然后你可以看到,在开始的应用程序开始时,大约5Mb的内存和完成超过10Mb,我断定有一个内存泄漏的地方,对吧?

下面是截图我进行garbace收集后: enter image description here

你可以看到,它返回到5Mb的左右的内存,但时间后,仍然长的时间。

我不知道这是否会是有用的,但我花了截图就知道来自哪个线程该内存的增长来自于:

enter image description here

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

回答

1

该图看起来像一个generational garage收集器的输出,并且不显示内存泄漏。锯齿是年轻一代的工作,基线的增加是长寿命的数据被复制到老一代。

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

1

这是一个Heisenbug。换句话说,you are observing that you are observing(很好地说,我不得不链接它)。 JMX正在使用内存来通过RMI向您发送内存统计信息。如果您想知道您的应用程序真的在吃什么,请定期查询Runtime.max/total/freeMemory并将其记录到文件或其他内容。

相关问题