Инструменты, доступные для отладки производственных проблем в приложениях Java [закрыто]
просто интересно, какие существуют различные инструменты и методы для отладки производственных проблем в приложениях Java. Как,
- Каковы способы и инструменты для создания дампов потоков?
- Каковы способы и инструменты для взятия свалок кучи?
- каковы инструменты для анализа вышеуказанных дампов?
(предположение, что все они находятся в среде Linux / Unix)
7 ответов
Каковы способы и инструменты для создания дампов потоков?
для дампа потока вы можете использовать JConsole, VisualVM или, проще говоря, отправить сигнал выхода в целевой процесс
kill -QUIT <pid>
или
kill -3 <pid>
начиная с Java 5, есть также jstack
, который является независимым от платформы и имеет приятный -m
возможность печати как Java, так и собственных кадров (смешанный режим).
какие есть способы и инструменты, чтобы взять кучу свалки?
С ВС VMs,jmap
, ВС утилиты jconsole, ВС , который VisualVM, SAP JVMMon. Для IBM VMs проверьте на этой странице. На самом деле, Eclipse MAT wiki имеет хороший получить дамп "кучи" раздел, обобщающий все параметры.
каковы инструменты для анализа вышеуказанных дампов?
для дампов потоков я использую TDA - анализатор дампа потоков (для Sun JDKs) и IBM Анализатор дампа потока и монитора (для IBM JDKs). самурай также очень приятно (он работает как tail -f
и автоматически подбирает дампы потоков из вашего std / stderr, он также может читать журналы "-verbose:gc") и был протестирован против VMs от Apple, BEA, HP, Sun и IBM (также может читать javacore IBM).
для свалок кучи, я использую , который VisualVM (для Sun JDKs) или IBM Heap Dump Analyzer (только для IBM JDKs) или über awesome затмение мат в зависимости от моих потребностей. Позже возможность работы с двоичными свалками hprof (производимыми Sun, HP, SAP и т. д... JVMs), IBM system dumps (после предварительной обработки) и IBM portable heap dumps (PHD) с различных платформ IBM).
предполагая 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:
нет стандартного набора инструментов для JVMs. Они зависят от поставщика, и вы должны ознакомиться с документацией.
для Sun Java 6 программа VisualVM очень, очень полезна для получения быстрого профиля и трассировки стека запущенной программы.
инструмент, который я использую для такого рода отладки Sun JVM, - это
- jstack, чтобы взять дамп потока
- jmap чтобы взять дамп памяти/кучи или гистограмму
- затмение мат для пост-анализа дампа кучи, производимого jmap
- визуальный vm имеет хороший пользовательский интерфейс для живого анализа виртуальной машины (также может принимать кучи и дампы потоков)
для отладки проблем с выделением памяти, InMemProfiler можно использовать в командной строке. Live vs собранные распределения можно отслеживать, а собранные объекты можно разделить на ведра в зависимости от времени их жизни.
в режиме трассировки этот инструмент можно использовать для определить источник выделения памяти.
и я думаю, что лучший способ отладки java-приложения в производственной среде - это не дамп и так далее, а хорошее управление журналы.
см., например,slf4j.