 |

13.03.2024, 19:33
|
|
Познавший АНТИЧАТ
Регистрация: 07.12.2015
Сообщений: 1,192
С нами:
5490401
Репутация:
1232
|
|
Всем привет.
Недавно, столкнулся с проблемой, что перестал нормально сниматься дамп кучи. Ну точнее он снимается, но крааайне медленно. За ночь выгрузил мне 200 мб из 4гб. Думал с диском что-то, пробовал на другой тачке, на другой JVM, под другой операционкой. Пробовал всяко разно, через jmap, jcmd, MBean. В итоге, ничего не меняется. Тут не нужно быть Шерлоком Холмсом, чтобы предположить, что трабла все же в моем коде. Я с таким за годы разработки столкнулся в первый раз)
Теперь вопрос. Что это за фигня может быть? Сталкивался ли кто-то с подобным и если да, то как решали? Без дампа хипа жить то конечно можно, но ппц как тоскливо...
|
|
|

13.03.2024, 21:47
|
|
Участник форума
Регистрация: 09.07.2015
Сообщений: 211
С нами:
5708007
Репутация:
312
|
|
|
|
|

13.03.2024, 22:24
|
|
Познавший АНТИЧАТ
Регистрация: 07.12.2015
Сообщений: 1,192
С нами:
5490401
Репутация:
1232
|
|
Спасибо. Так я тоже пробовал. Дамп процесса я снял через gdb(он причем снимается на всю адресованную виртуальную память внезапно), но вот хип у меня чет не получается потом с дампа снять. Если брать аргументы из статьи для jmap, то он не подключается и пишет про ошибку:
1710354216714.webpAristo · 13 Мар 2024 в 21:24' data-fancybox="lb-thread-27444" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://mmo-dev.info/attachments/1710354216714-webp.73660/" data-type="image" style="cursor: pointer;" title="1710354216714.webp">
|
|
|

13.03.2024, 22:32
|
|
Участник форума
Регистрация: 09.07.2015
Сообщений: 211
С нами:
5708007
Репутация:
312
|
|
Попробуй так:
Код:
Код:
jhsdb jmap --binaryheap --dumpfile jvm.hprof --core /home/[user]/jvm.core --exe /usr/lib/jvm/java-21-graalvm/bin/java
|
|
|

13.03.2024, 22:36
|
|
Познавший АНТИЧАТ
Регистрация: 07.12.2015
Сообщений: 1,192
С нами:
5490401
Репутация:
1232
|
|
Сообщение от ANZO
Попробуй так:
Код:
Код:
jhsdb jmap --binaryheap --dumpfile jvm.hprof --core /home/[user]/jvm.core --exe /usr/lib/jvm/java-21-graalvm/bin/java
Да, вот так заработало. Надо было внимательно прочитать ман на jhsdb)) Спасибо) Скорость снятия хипа значительно выше вот в таком виде! Он мне ядро снял на 43гб дамп. Я надеюсь, он мне хип не на 43 гб снять сейчас попробует)))
Я сюда перепишу кратко тезисы основные с той статьи. Вдруг линк помрет, чтобы если кто с таким же столкнется, решение было
1) С помощью утилиты
Код:
узнаем pid нужного процесса java
2) С помощью gdb(GNU Debugger) подключаемся к процессу(мне потребовались повышенные права):
Код:
Код:
gdb –pid=PID который мы получили через jps
3) После подключения к процессу, появится консоль gdb. В ней пишем:
Код:
(путь нужно заменить на актуальный для вашей системы). После окончания выгрузки дампа ядра, отключаемся командой
Код:
и выходим с помощью команды
Код:
(Обратите внимание, что дамп ядра снимается с учетом всей виртуальной памяти и может быть размером десятки гигабайт. Поэтому лучше заранее узнайте размер через htop)
4) После этого подключаемся к файлу ядра и снимаем с него дамп хипа командой
Код:
Код:
jhsdb jmap --binaryheap --dumpfile jvm.hprof --core /home/[user]/jvm.core --exe /usr/lib/jvm/java-21-graalvm/bin/java
Не забудьте указать корректный путь к файлу ядра и к исполнительному файлу JVM той версии, которая работала на процессе с которого снимали дамп.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|