Java8, profile, VisualVM

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

Щось не виходить осягнути ДАО of Heap Dump. Так як всі інші профайлери платні(принаймні хороші) то приходиться користуватись стандартним. Ось що за проблема. Маю меморі лік. Дочікуюсь коли память добряче набється всяким мотлохом (e.g char[] has 600 000 instances) і натискую Heap Dump. В дампі я бачу що char[] має не 600 000 інстансів а 150 000. так як пістля GC. Отже перед тим як зробити дамп VisualVm робить GC. Ну як так? як же ж мені знайти цей меморі лік?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

дякую всім за відповіді.. буду розбиратись далі

Все так як і має бути. Додай кілька опцій до jvm, і аналізуй даймп який буде створений коли пам’ять закінчиться:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/

P.S. Для аналізу дампу глянь в сторону Eclipse MAT

як же ж мені знайти цей меморі лік?
Можете посмотреть на Java Mission Control
www.youtube.com/...6zErLW7HSkY7aqdeT&index=8

Навіщо такі збочення — береш онлайн-монітор починаючи зі стандартної JConsole і закінчуючі плагінами під твій сервер, і дивися хто і навіщо зливає пам′ять. Зазвичай це робиться на полігоні, де виділяєш менше пам′яті, а дії гравців емулюються тестами.

але в мене память збільшується коли на сервері немає гравців.. гістограма то росте то падає..

А сам викликати GC не можеш без зняття дампів? Тобто дивися по нижній точці гістограми. Все що вище — сміття. Мати купу сміття для JVM — це нормально.

Ну якщо gc вивільнює пам’ять — то це не memory leak

Підписатись на коментарі