Некоторое время назад мне пришлось проанализировать большой дамп кучи java, созданный одним из наших серверов после утечки памяти. Это было тяжело. Обычно я использую Eclipse MAT для этой работы, но на этот раз он был настолько велик, что инструмент не мог проанализировать дамп кучи за приемлемое время и требовал все больше и больше памяти.
В конце концов я взял мощную машину с графическим интерфейсом в облаке и заставил ее работать, но опыт был плохим. Для этого мне пришлось использовать графический интерфейс, потому что все инструменты, которые я знал тогда, требовали работы с графическим интерфейсом.
Запуск сервера с графическим интерфейсом в облаке – это не то, что я делаю каждый день, и потребовалось некоторое время, чтобы настроить сервер, запустить его, подключиться к удаленному рабочему столу и т.д.”.
Я подумал, что должен быть лучший вариант. Итак, я огляделся и обнаружил, что вы можете позволить Eclipse MAT анализировать дамп кучи из командной строки!
Вы можете использовать скрипт, который поставляется с установкой Eclipse MAT для Linux. Скрипт вычислит индексы для последующего использования в eclipse MAT, а также может генерировать несколько хороших отчетов в формате HTML, которые обычно достаточно хороши, чтобы понять проблему. Индексные файлы помогут Eclipse MAT открыться за считанные секунды, а не за долгие часы.
Это намного лучше, чем тот опыт, который у меня был, я мог запустить скрипт на удаленном сервере из терминала, который легко настроить, и у меня обычно есть пара серверов, готовых выполнить за меня некоторую работу.
Я попробовал сценарий, и он отлично сработал. Но он поставляется только с установкой Linux. Что, если я захочу запустить его на Mac или Windows? Кроме того, Eclipse MAT требует установки Java.
Итак, я решил обернуть его в контейнер docker, и вот как AutoMAT был создан. Теперь каждый раз, когда мне нужно проанализировать дамп кучи, я мог бы просто запустить что-то вроде:
docker run -it –mount src=$(pwd),target=/data,type=bind docker.bintray.io/jfrog/automat heap1.подозреваемые hprof 11g, обзор
Это позволит проанализировать дамп кучи, создать индексы и сгенерировать 2 хороших HTML-отчета. Подозреваемые и обзор.
После выполнения этого обычно достаточно открыть отчеты в формате HTML, чтобы понять проблему. Но если вам нужна более глубокая детализация памяти, вы можете открыть дамп кучи с помощью MAT, и, поскольку индексы уже есть, Eclipse MAT откроется мгновенно.
Что ж, это было здорово, но если бы мне нужна была сильная машина для автоматического запуска , мне все равно пришлось бы найти машину, загрузить дамп кучи, установить docker, если он не установлен, а затем загрузить все обратно или сохранить где-нибудь.
Итак, я решил создать автоматизацию вокруг этого. Во-первых, я попросил своего коллегу создать задание Дженкинса, которое возьмет дамп кучи с производственного сервера и загрузит его в Artifactory.
Позже я создал второе задание Дженкинса, которое загрузит дамп кучи из Artifactory и запустит его автоматически. Артефакты автоматического запуска будут загружены обратно в artifactory.
Второе задание Дженкинса может быть запущено первым или вручную после того, как кто-то загрузил дамп кучи в Artifactory.
Таким образом, любой сотрудник организации может анализировать дампы кучи одним нажатием кнопки.
Если вы планируете работать с дампами кучи в автоматизации, я рекомендую сжать их, я использую pigz, который является более быстрой версией gzip. Я использовал Artifactory для хранения файлов для моей автоматизации, вы можете использовать что-нибудь еще, но если вы используете Artifactory, ознакомьтесь с jfrog-cli и особенно с функциями параллельной загрузки и выгрузки.
AutoMAT имеет открытый исходный код, и вы можете посетить страницу github для получения дополнительной информации: https://github.com/jfrog/auto-mat
Оригинал: “https://dev.to/jfrog/auto-mat-analyse-java-heap-dumps-from-commandline-10hg”