Показать сообщение отдельно

  #5  
Старый 13.03.2024, 22:36
Aristo
Познавший АНТИЧАТ
Регистрация: 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) С помощью утилиты



Код:


Код:
jps
узнаем pid нужного процесса java

2) С помощью gdb(GNU Debugger) подключаемся к процессу(мне потребовались повышенные права):

Код:


Код:
gdb –pid=PID который мы получили через jps
3) После подключения к процессу, появится консоль gdb. В ней пишем:



Код:


Код:
gcore /tmp/jvm.core
(путь нужно заменить на актуальный для вашей системы). После окончания выгрузки дампа ядра, отключаемся командой



Код:


Код:
detach
и выходим с помощью команды



Код:


Код:
quit
(Обратите внимание, что дамп ядра снимается с учетом всей виртуальной памяти и может быть размером десятки гигабайт. Поэтому лучше заранее узнайте размер через htop)

4) После этого подключаемся к файлу ядра и снимаем с него дамп хипа командой

Код:


Код:
jhsdb jmap --binaryheap --dumpfile jvm.hprof --core /home/[user]/jvm.core --exe /usr/lib/jvm/java-21-graalvm/bin/java
Не забудьте указать корректный путь к файлу ядра и к исполнительному файлу JVM той версии, которая работала на процессе с которого снимали дамп.
 
Ответить с цитированием