Инструменты для отладки производства Проблемы в приложениях 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/

Ответ 4

Нет стандартного набора инструментов для JVM. Они зависят от поставщика, и вы должны проконсультироваться с документацией.

Для Sun Java 6 программа VisualVM очень полезна, чтобы получить быстрый профиль и трассировку стека запущенной программы.

Ответ 5

Инструмент, который я использую для такого рода отладки Sun JVM,

  • jstack взять дамп потока
  • jmap взять кучу памяти/кучи или гистограмму
  • eclipse mat для пост-анализа кучи дампа, созданного jmap
  • визуальный vm имеет приятный ui для живого анализа vm (также может принимать кучи и дампы потоков)

Ответ 6

Чтобы отладить проблемы с распределением памяти, InMemProfiler можно использовать в командной строке. Живые и собранные распределения можно отслеживать, а собранные объекты можно разделить на ведра на основе их сроков службы.

В режиме трассировки этот инструмент можно использовать для определить источник распределения памяти.

Ответ 7

И я считаю, что лучший способ отладки Java-приложения в рабочей среде - это не дамп и т.д., а хорошее управление журналами.

См. например slf4j.