JMX RMI - утечка памяти - ArrayNotificationBuffer увеличивается со временем
Я пишу приложение, которое должно работать много часов (10-100), которые я отслеживаю с помощью JMX.
Однако через некоторое время я обнаружил две вещи:
com.sun.jmx.remote.internal.ArrayNotificationBuffer#1
становится больше: после 20 часов, это около 10 МБ - когда я его начал, он был меньше, чем 1 МБ- Больше тем как
RMI TCP Accept-0
(или любой другой номер) иRMI-TCP-Connection(44)-[IP]
создаются со временем.
Я думаю, что это как-то связано с различными подключениями к приложению, но в настоящее время я только что подключился один раз, но некоторые подключения все еще остаются открытыми.
Как это может быть? Как я могу это исправить?
1 ответ
Я ковырялся в комментариях к исходному коду для ArrayNotificationBuffer, и он имеет приличное количество журналирования трассировки JMX, так что вы можете включить трассировку JMX, чтобы получить лучшее представление о том, что происходит.
Вы можете обнаружить, что эта известная ошибка влияет на вас. Отчет об ошибке указывает, что проблема наблюдается при длительных соединениях. Упомянута пара обходных путей, хотя более простой, если это практически осуществимо для вас, заключается в периодическом отключении и повторном подключении. Хорошей новостью является то, что в Java7 есть исправление для этого, хотя я не уверен, что оно уже выпущено.
Я также хотел бы убедиться, что если вы регистрируете прослушиватели уведомлений JMX, они постоянно и оперативно обрабатывают уведомления. Несоблюдение этого требования также может быть причиной этого симптома.