2017-02-10 17 views
1

У меня есть приложение, которое использует библиотеку paho mqtt. Я заметил с VisualVM, что, похоже, утечка памяти в моем приложении.Как исправить утечку памяти из приложения MQTT?

Вот несколько скриншотов: enter image description here

Прежде всего, я не understant почему некоторые пик так, если кто-то может объяснить мне, что это я был бы признателен. Тогда вы можете видеть, что в начале приложения начинаются с 5 Мб памяти и заканчиваются более чем на 10 Мб, я пришел к выводу, что где-то есть утечка памяти, я прав?

Вот скриншот после того, как я выполнил garbace коллектор: enter image description here

Вы можете видеть, что он возвращается вокруг памяти 5mb, но по-прежнему растет раз за разом.

Я не знаю, если это было бы полезно, но я взял скриншот, чтобы знать, с какого потоком этого рост памяти происходит из:

enter image description here

Я надеюсь, что кто-то сможет помочь мне. Большое спасибо !

ответ

1

График выглядит как выход коллектора generational garage и не показывает утечку памяти. Зуб пилы - это работа молодого поколения, и увеличение базовой линии - это долговечные данные, которые копируются в старое поколение.

Тот факт, что граф сбрасывается до 5 мб после запуска коллекции, является очисткой старого поколения и освобождением данных, которые не копируются из молодого поколения.

1

Это Heisenbug. Другими словами, you are observing that you are observing (красиво сказал, мне пришлось связать его). JMX ест память, чтобы отправить вам статистику памяти по RMI. Если вы хотите узнать, сколько ваше приложение действительно есть, запросите Runtime.max/total/freeMemory через регулярные промежутки времени и запишите его в файл или что-то в этом роде.