Дамп кучи - сохраненный размер циклических ссылок - PullRequest
0 голосов
/ 20 марта 2019

Старое долго работающее приложение в prod исчерпало память.При анализе дампа потока я перемещаюсь с сохраненным размером и ищу объекты с большим сохраненным размером, чтобы понять, что вызывает проблемы с памятью (утечка или слишком много объектов из какого-либо процесса).

В этом случаеотчет об утечке памяти указывает на HashedSession с молнии.При просмотре сеансов я вижу, что в приложении сеанс содержит объекты в атрибутах, которые ссылаются на один и тот же сеанс в цикле.

Теперь проблема в том, что я не могу определить, какие компоненты имеют оставшийся размер (которые суммируются с общим оставшимся размером) и откуда они поступают.Самый большой размер в сеансе - это сам сеанс, и другие атрибуты почти ничего не имеют.

Class Name                                                                          | Retained Heap
----------------------------------------------------------------------------------------------------
org.eclipse.jetty.server.session.HashedSession @ 0x77d47bf70                        |   201 414 144
|- _attributes java.util.HashMap @ 0x782c20250                                      |   201 414 056
|  |- table java.util.HashMap$Node[16] @ 0x78594db98                                |   201 414 008
|  |  |- [10] java.util.HashMap$Node @ 0x787047090                                  |   201 411 880
|  |  |  |- value com.vaadin.terminal.gwt.server.WebApplicationContext @ 0x784244740|   201 411 848
|  |  |  |  |- session org.eclipse.jetty.server.session.HashedSession @ 0x77d47bf70 |   201 414 144
|  |  |  |  |- browser com.vaadin.terminal.gwt.server.WebBrowser @ 0x7832eeb68      |           400
|  |  |  |  |- applications java.util.HashSet @ 0x787a9e1a8                         |           192
|  |  |  |  |- applicationToAjaxAppMgrMap java.util.HashMap @ 0x783280118           |           160
|  |  |  |  |- listeners java.util.Collections$SynchronizedList @ 0x787a9e190       |           104
----------------------------------------------------------------------------------------------------

Я знаю, что, возможно, я делаю здесь что-то глупое, но я подумал, что следуя самым большим оставшимся размерам(или второй по величине, чтобы пропустить цикл) Я бы пришел к настоящим злодеям этого вопроса.Но я не могу найти какой-либо другой сохраненный набор объектов с таким же сохраненным размером, чтобы указать мне на следующий подозрительный объект (кроме исходного сохраненного размера сеанса).

Работает на Java 8, HotSpot JVM

1 Ответ

0 голосов
/ 20 июля 2019

Да, вы следовали циклическим ссылкам, начиная с HashedSession @ 0x77d47bf70 до HashedSession @ 0x77d47bf70.Однако вы не полностью просмотрели хэш-карту _attributes.Что еще там?

Используете ли вы "Список объектов -> Исходящие ссылки", щелкнув правой кнопкой мыши на HashedSession @ 0x77d47bf70?

...