В этой статье я научу вас, как проанализировать стек потока JVM и как найти основную причину проблемы из информации о стеке. По моему мнению, технология анализа стека потоков - это технология, которую должны освоить инженеры -инженеры Java EE, которые поддерживают инженеры. Информация, хранящаяся в стеке потоков, обычно выходит за рамки вашего воображения.
Моя цель - поделиться знаниями и опытом, накопленными в анализе потоков за последние десять лет. Эти знания и опыт получены в проведении анализа различных версий JVM и поставщиков JVM различных производителей.
Итак, готовы ли вы, теперь эта статья добавлена в закладку. Чего вы ждете, пожалуйста, поторопитесь и поделитесь этим планом обучения анализу потоков со своими коллегами и друзьями.
Звучит хорошо.
Мое предложение состоит в том, чтобы следовать за мной, чтобы завершить этот план обучения анализа темы. Вот учебный контент, который мы рассмотрим. В то же время я поделюсь с вами в реальных случаях, с которыми я рассмотрел, чтобы все могли учиться и понять со всеми.
1) Обзор стеков потоков и базовых знаний
2) Принципы и связанные с ними инструменты стека потоков
3) Различные форматы стека с потоком JVM (Sun Hotspot, IBM JRE, Oracal Jrockit)
4) Метод введения и анализа журнала стека потоков
5) Анализ стеков потоков и связанных с ними технологий
6) Шаблоны общих проблем (резьба, мертвые замки, ввождение о смерти, утилизация мусора/проблему с измерениями, мертвые цикл и т. Д.)
7) Например, анализ задач стека потоков
Я надеюсь, что эта серия обучения принесет вам настоящую помощь, поэтому, пожалуйста, продолжайте обращать внимание на еженедельное обновление статей.
Но что мне делать, если у меня есть какие -либо вопросы в процессе обучения, или я не могу понять контент в статье?
Не волнуйтесь, просто относитесь ко мне как к своему наставнику. Вы можете проконсультироваться со мной с любыми вопросами о стеке потоков (при условии, что проблема не может быть слишком низкой). Пожалуйста, выберите следующие способы связаться со мной:
1) Прямо прокомментировано в этой статье (если вы сожалеете, вы можете быть анонимным)
2) Отправить данные стека потоков на форум анализа основной причины
3) Отправьте мне электронное письмо, адрес@[email protected]
Можете ли вы помочь мне проанализировать проблемы, с которыми сталкиваются наши продукты?
Конечно, если вы готовы, вы можете отправить мне свои живые данные в стеке через форум по анализу корневых накинков Mail или Forum. Фактическая проблема заключается в том, что король обучения для улучшения навыков.
Я действительно надеюсь, что всем сможет понравиться эта тренировка. Поэтому я сделаю все возможное, чтобы предоставить вам высококачественные материалы и ответить на ваши различные вопросы.
Прежде чем представить технологию анализа стека и модели технологий и модели проблем, вы должны сначала сообщить вам основной контент. Таким образом, в этом посте я расскажу о самом основном контенте, чтобы каждый мог лучше понять взаимодействие между JVM, промежуточным программным обеспечением и Java EE -контейнерами.
Java VM Обзор
Виртуальная машина Java является основой платформы Jave EE. Это место, где промежуточное программное обеспечение и приложения развернуты и работают.
JVM предоставляет следующие вещи для программного обеспечения для промежуточного программного обеспечения и вашей программы Java/Java EE:
(Двоичная форма) Java / Java EE Программа. Среда выполнения функциональных характеристик и инструментов программы (инфраструктура IO, структура данных, управление потоками, безопасность, мониторинг и т. Д.).)
Динамическое распределение памяти и управление с помощью восстановления мусора
Ваш JVM может оставаться на многих операционных системах (Solaris, AIX, Windows и т. Д.) И может быть настроен в соответствии с вашим физическим сервером.
Взаимодействие между JVM и промежуточным программным обеспечением
На следующей диаграмме показана интерактивная модель с высоким уровнем RISE между JVM, промежуточным программным обеспечением и приложениями.
Некоторые простые и типичные взаимодействия между JVM, промежуточным программным обеспечением и приложениями отображаются на рисунке. Как вы можете видеть, распределение потоков стандартного приложения Java EE завершено между ядром средней части и JVM. (Конечно, есть исключения. Приложение может напрямую вызвать API для создания потока. Этот подход не является общим, и необходимо быть осторожным во время использования)
В то же время обратите внимание, что некоторые потоки управляются JVM.
Поскольку большая часть потоков осуществляется в контейнере Java EE, важно понимать и понимать отслеживание стека потоков и может идентифицировать его из данных стека, что важно для вас. Запросы собираются выполнить контейнер Java EE.
С точки зрения анализа стека хранения потоков, вы сможете понять разницу между пулом потоков, обнаруженной из JVM, и определить тип запроса.
Последний раздел предоставит вам обзор стека потоков JVM для Hotsop V.
Обратите внимание, что вы можете получить пример стека потоков для этой статьи по основным причинам.
Степник потоков JVM -Что это такое?
Степник потоков JVM - это заданный снимки времени, который может предоставить вам полный список всех созданных потоков Java.
Каждая найденная ветка Java даст вам следующую информацию:
Название потока;
Тип потока и приоритет, например: Daemon Prio = 3 ** Программа промежуточного программного обеспечения обычно создает свои потоки в форме фонового опекуна, что означает, что эти потоки работают в фоновом режиме; К вашему приложению Java EE **
Идентификатор потока Java, такой как: tid = 0x000000011e52a800 ** Это идентификатор потока Java, полученный через java.lang.thread.getid ().
Идентификатор собственного потока, такой как: nid = 0x251c **, ключ, потому что идентификатор собственного потока позволяет вам получить с точки зрения операционной системы.
Статус потока Java и подробная информация, такая как: ожидание записи монитора [0xfffffffffea5afb000] java.lang.thread.state: block (на мониторе объекта)
** Вы можете быстро понять возможную причину, по которой статус потока чрезвычайно блокируется **
Отслеживание стека Java; Причина многих типов проблем, 90%необходимой информации.
Разложение памяти Java Stack; Эта информация очень полезна при анализе проблем, вызванных частыми GCS. Вы можете использовать известные данные или режим потока для быстрого позиционирования.
Heappsynggen Total 466944K, Used 178734K [0xFFFFFFFFFF45C00000, 0xFFFFFFFFF70800000, 0XFFFFFFFFF70800000) Eden Space 233472K, 76% USED F45C00000, 0XFFFFFFFF50AB7C50,0XFFFFFFFFFF540000) From Space 233472K, 0% Used [0xffffffffffffff62400000, 0xFFFFFFF62400000,0XFFFFFFFFF70800000) E 233472K, 0% userd [0xffffffff54000000 , 0XFFFFFFFF54000000 , 0XFFFFFFFFF62400000) PSOLDGEN TOTAL 1400832K, USED 1400831K [0xffffffffef0400000, 0xffffff45c00000, 0xFFFFFFFFF45C00000) Object Space 1400832K, 99% Used [0xffffffFFFFFFFEF0400000, 0XFFFFFFFFF45BFFFFB8,0XFFFFFFFFFFF45C00000) PSPERMGEN TOTAL 262144K, USED 248475K , 0xffffffee0400000, 0xFFFFFFFFFF0400000) Object Space 262144K, 94 % used [0xffffffffed0400000 , 0xffffffdf6f08,0xfffffffffffee0400000)
Большая разборка информации стека потоков
Чтобы позволить каждому лучше понять, для всех предоставляется следующая картина.
На рисунке выше видно, что стек резьбы состоит из нескольких разных частей. Эта информация важна для анализа проблемы, но в режиме анализа различных задач будет использоваться разные части (режим проблемы будет моделировать и демонстрировать в более поздних статьях.)
Теперь, благодаря этому примеру анализа, я подробно объясню компоненты Hotespot Inforted Stack Information:
# Полный свалки потока
«Full Thread Damp» -это только глобальное ключевое слово. Это начало снимка стека потоков.
Полный резьба дампа Java Hotspot (TM) 64-разрядная VM Server (20,0-B11 Mixed Mode):
# Java EE промежуточное программное обеспечение, третьи стороны и потоки в пользовательском программном обеспечении приложений
Эта часть является основной частью всего стека потоков, а также часть, которая обычно должна проанализировать время. Количество средних линий стека зависит от используемого промежуточного программного обеспечения, третьей частичной библиотеки (может иметь независимые потоки) и вашего приложения (если вы создаете пользовательский поток, это обычно не хорошая практика).
В нашем примере стека потоков Weblogic - это промежуточное программное обеспечение, которое мы используем. Начиная с Weblogic 9.2, вы будете использовать уникальный пул потоков, которым можно управлять »
«[Standby] ExecuteThread: '414' для очереди: 'weblogic.kernel.default (самонаделение)'" "Daemon Prio = 3 tid = 0x000000010916a800 nid = 0x2613 в объекте. Состояние: Ожидание (на мониторе объекта) на java.lang.object.wait (нативный метод) -ожидание <0xfffffff27d44de0> (a weblogic.work.executethread). Work.work.cutethread.waitforRequest (executeThread.java:160) -clocked <0xfffffffffffffffffffffffffffffffripts27d44de0> (a weblogic.work.executethread) c.work.executethread.run (executeThread.java:181)
# Потока VM Hotspot
Это внутренняя потока, управляемая VM Hotspot для собственной работы внутренних операций. Как правило, вам не нужно слишком много делать с этим, если только вы не найдете высокий уровень занятий процессора, если вы (через связанные стеки потоков и PRSTAT или идентификатор нативного потока).
"Пецирическая поток задачи" PRIO = 3 TID = 0x0000000101238800 NID = 0x19 В ожидании условия
# Потока горячей точки GC
При использовании горячей точки для параллельного GC (теперь это распространено в среде нескольких физических ядер), когда виртуальная машина Hotspot, созданная по умолчанию, или каждый JVM управляет потоком GC с определенным логотипом. Периодическая очистка GC приведет к общему сокращению времени GC;
«Поток задачи GC#0 (parallelgc)" prio = 3 tid = 0x0000000100120000 nid = 0x3 Runnable "gc Задача#1 (parallelgc)" prio = 3 tid = 0x0000131000 nid = 0x444 Runnable ………………………………………… …………………………………………………………………………………………………………………………………………… ……………………………………………………………
Это критические данные, потому что, когда вы сталкиваетесь с проблемами, связанными с GC, такими как чрезмерные утечки GC и память, вы сможете использовать операционную систему или поток Java, связанные с нативным значением идентификатора этих потоков, а затем найдите какие -либо права Правильно.
# JNI Global Relights Count
Глобальная ссылка JNI (Java Local Interface) происходит от локального кода до основного объекта Java, управляемого коллекционером мусора Java. Сбор мусора.
В то же время, также важно обратить внимание на ссылки JNI, чтобы обнаружить утечки, связанные с JNI.
JNI Глобальные ссылки: 1925
# Java Stack Использование просмотра
Эти данные были добавлены обратно в JDK 1.6, предоставляя вам короткий и быстрый вид стека горячей точки. и Java Cour в отдельном снимке, так что вы можете проанализировать (или исключить) в конкретном пространстве памяти Java в то время.
Heap Psyounggen Total 466944K, Used 178734K [0xffffffff45c00000, 0xFFFFFFFF70800000, 0XFFFFFFFFF70800000) Eden Space 233472K, 76% USED F45C00000, 0XFFFFFFFF50AB7C50,0XFFFFFFFFFF540000) From Space 233472K, 0% Used [0xffffffffffffff62400000, 0xFFFFFFF62400000,0XFFFFFFFFF70800000) e 233472K, 0% used [ 0XFFFFFFFFF54000000, 0xffffffff540000, 0xFFFFFFFFF62400000) PSOLDGEN TOTAL 1400832k, Used 1400831K [0xffffffef0400000, 0xffffffffffffffffff, 0XFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFI FF45C00000) Object space 1400832k, 99% USED [0xffffffFFFFEF0400000,0XFFFFFFFFFF45BFFFFB8,0XFFFFFFFFF45C00000) PSPERMGEN TOTAL 262144K, USED 248475K [0 XFFFFFFFFFED0400000, 0xFFFFFFFFFEE0400000, 0xFFFFFFFFFEF0400000) Object Space 262144K, 94% использовали [0xffffffffffed0400000,0xffffffffffffffffffffffffly6f08,0xffffffffffee040000