Знаете ли вы о каких-либо инструментах для анализа логов сборки мусора в Java? [закрыто]
Описание проблемы:
Я ищу инструмент или скрипт, который сможет обрабатывать логи консоли моего веб-приложения, извлекать информацию о сборке мусора и представлять ее в наглядном виде.
Я работаю на JVM Sun Java 1.4.2 с использованием следующих флагов:
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
Лог-вывод выглядит следующим образом:
54.736: [Full GC 54.737: [Tenured: 172798K->18092K(174784K), 2.3792658 secs] 257598K->18092K(259584K), [Perm : 20476K->20476K(20480K)], 2.4715398 secs]
Понять несколько сотен подобных записей в логах было бы значительно проще, если бы у меня был инструмент, который бы визуально отображал тренды сборки мусора.
Прошу помощи в поиске такого инструмента или даже готового скрипта, который может помочь с этой задачей.
5 ответ(ов)
IBM's GC toolkit делает именно то, что вам нужно. Вы можете найти его по следующей ссылке: IBM GC toolkit.
Однако не совсем ясно, будет ли он совместим с файлами журналов сборки мусора (GC logs) от JVM от Sun. Рекомендуется протестировать совместимость на ваших данных для уверенности.
Я попробовал использовать онлайн инструмент http://gceasy.io, который способен читать логи сборщика мусора (GC) моего Sun JDK 1.8.
Наиболее мощным инструментом, который я нашел для работы как с логами IBM, так и с логами Hotspot JVM и их визуализации, является PMAT от IBM:
https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?communityUuid=22d56091-3a7b-4497-b36e-634b51838e11
Я считаю его более быстрым и информативным, чем инструмент в IBM Support Assistant. Этот инструмент постоянно обновляется, последнее обновление было в июле 2012 года.
Однако у него есть некоторые проблемы с разбором логов с политикой CMS, но надеюсь, что это можно будет исправить.
PrintGCStats тоже довольно хорош и предоставляет хорошие статистические данные, но для визуализации во времени требует доработки.
Несколько лет назад Джон Кумс (группа Hotspot GC) выпустил PrintGCStats — скрипт на awk, который "суммирует статистику о сборке мусора, в частности, общее время пауз из-за сборки, средние значения, максимумы и стандартные отклонения". Копию этого скрипта можно найти на java.net: http://java.net/projects/printgcstats.
Проблема с плагином gchisto для VisualVM может быть связана с несовместимостью формата файла или версией Java. Учитывая, что у вас есть файл с данными printgc для JDK 1.6 и вы не можете найти подходящий инструмент для его анализа, вот несколько возможных решений:
Проверьте совместимость формата: Возможно, gchisto не поддерживает формат файлов, созданных для JDK 1.6. Убедитесь, что вы используете правильный формат данных, который поддерживается вашим инструментом.
Обновите VisualVM и плагины: Убедитесь, что у вас установлена последняя версия VisualVM и плагина gchisto. Иногда обновления могут решить проблемы с совместимостью.
Попробуйте альтернативные инструменты: Если HPjmeter работал для JDK 1.5, вы можете попробовать другие инструменты, например, Eclipse MAT (Memory Analyzer Tool), который поддерживает работу с файлами GC logs.
Обратите внимание на настройки Java: Убедитесь, что ваш JDK 1.6 настроен для вывода необходимых данных. Проверьте настройки JVM и параметры, используемые при запуске вашего приложения, чтобы убедиться, что данные GC выводятся в нужном формате.
Если ни одно из решений не помогает, попробуйте обратиться на форумах и в сообществах, посвященных Java, где могут быть другие пользователи, сталкивавшиеся с аналогичными проблемами.
StringBuilder против конкатенации строк в toString() в Java
Почему 2 * (i * i) быстрее, чем 2 * i * i в Java?
Есть ли деструктор в Java?
java.util.logging.Logger не учитывает уровень java.util.logging.Level?
Эффективен ли метод System.arraycopy() в Java для малых массивов?