Инструменты для отладки производства Проблемы в приложениях Java
Просто интересно, какие существуют различные инструменты и методы для отладки производственных проблем в Java-приложениях.
Как,
- Каковы способы и инструменты для создания дампов потоков?
- Каковы способы и инструменты для загрузки кучи кучи?
- Каковы инструменты для анализа вышеуказанных дампов?
(Предполагается, что все в среде Linux/Unix)
Ответы
Ответ 1
Каковы способы и инструменты для создания дампов потоков?
Для дампа потока вы можете использовать JConsole, VisualVM или, проще говоря, отправить сигнал QUIT в целевой процесс
kill -QUIT <pid>
или
kill -3 <pid>
Начиная с Java 5, существует также jstack
, который является независимым от платформы и имеет приятный вариант -m
для печати как Java, так и родные кадры (смешанный режим).
Каковы способы и инструменты для сброса кучи?
С виртуальными машинами Sun, jmap
, Sun JConsole, Sun VisualVM, SAP JVMMon. Для виртуальных машин IBM проверьте эту страницу. На самом деле, Wiki Eclipse MAT имеет приятный Получение кучи дампа, в котором перечислены все параметры.
Каковы инструменты для анализа вышеуказанных дампов?
Для дампов потоков я использую TDA - анализатор дампов потоков (для Sun JDK) и IBM Thread and Monitor Dump Analyzer (для IBM JDK). Samurai также очень хорошо (он работает как tail -f
и автоматически загружает дампы потоков из вашего std/stderr, он также может читать "-verbose: gc" ) и был протестирован против виртуальных машин от Apple, BEA, HP, Sun и IBM (также можно прочитать IBM javacore).
Для кучи кучи я использую VisualVM (для Sun JDK) или IBM Heap Dump Analyzer (только для IBM JDK) или über awesome Eclipse MAT в зависимости от моих потребностей. Позже он может работать с двоичными кучими массивов HPROF (выпущенными Sun, HP, SAP и т.д. JVM), дампами системы IBM (после их предварительной обработки) и переносными кучами (PHD) с разных платформ IBM).
Ответ 2
Предполагая JDK 6, взгляните на следующую статью, чтобы получить дампы потоков запущенной программы:
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
Вы можете использовать JHat для анализа кучи:
http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html
Если вы хотите сделать дампы памяти, посмотрите jmap:
http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
В качестве альтернативы, если вам нужно сделать более глубокий анализ, посмотрите на профилировщик, например, Yourkit:
http://www.yourkit.com/
Ответ 3
Также есть две вещи, которые могут вас заинтересовать:
Ответ 4
Нет стандартного набора инструментов для JVM. Они зависят от поставщика, и вы должны проконсультироваться с документацией.
Для Sun Java 6 программа VisualVM очень полезна, чтобы получить быстрый профиль и трассировку стека запущенной программы.
Ответ 5
Инструмент, который я использую для такого рода отладки Sun JVM,
- jstack взять дамп потока
- jmap взять кучу памяти/кучи или гистограмму
- eclipse mat для пост-анализа кучи дампа, созданного jmap
- визуальный vm имеет приятный ui для живого анализа vm (также может принимать кучи и дампы потоков)
Ответ 6
Чтобы отладить проблемы с распределением памяти, InMemProfiler можно использовать в командной строке. Живые и собранные распределения можно отслеживать, а собранные объекты можно разделить на ведра на основе их сроков службы.
В режиме трассировки этот инструмент можно использовать для определить источник распределения памяти.
Ответ 7
И я считаю, что лучший способ отладки Java-приложения в рабочей среде - это не дамп и т.д., а хорошее управление журналами.
См. например slf4j.