2015-05-22 1 views
0

Мы можем воспроизвести ситуацию, когда часть вашей системы зависает. Мы подозреваем, что это может быть связано с проблемой блокировки.Инструмент для поиска причины мертвой блокировки в приложении Java

Как мы можем узнать, где сейчас находится каждый поток нашего приложения? Какой инструмент мы можем использовать, чтобы найти место, где происходит тупик?

+0

Посмотрите на это http://stackoverflow.com/questions/8942658/static-analysis-tool-to-detect-multithreading-problems-deadlocks-race-conditio –

+1

Начните с jstack. –

+0

вы можете использовать инструменты отладки браузера, если это веб-приложение, попробуйте добавить комментарии в любое место, где, по вашему мнению, может возникнуть взаимоблокировка и проследить их, чтобы найти источник вашей проблемы. – BhandariS

ответ

1

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

Рекомендуется использовать несколько дампов потоков в интервале 5-10 секунд, чтобы вы могли сравнить активность потоков на разных свалких.

Есть несколько способов взять дамп нить приложения:

  1. Если вы jstack на машине, где процесс работает,

    jstack {pid} > threaddump.log 
    
  2. убить -3 {PID}

  3. Используя jvisiualvm или jconsole, вы можете подключиться к локальному/удаленному процессу и сгенерировать threaddump

0

Если вы хотите найти нить, которая вызывает тупик, вы можете использовать ThreadMXBean. Вот очень хороший пример того, как сделать это:

deadlock detection using ThreadMXBean

Также здесь есть ссылка с оракулом боярышника использовать jstack. Jstack может быть более полезным для вас, как он покажет вам, какие потоки ждет ресурса, для которого ресурс и он будет также сказать вам, какой поток держит ресурс:

oracle docs link

2

Вы можете использовать jstack утилита, он показывает трассировки стека для java-процессов. Вы найдете его в каталоге bin вашего JDK. См. the documentation.

2

Adquire threaddump (JConsole, убить -3 PID, и т.д.) и анализировать его с Samurai

1

Если вы хотите что-то с графическим дисплеем, вы можете использовать JProfiler, чей замок график показывает тупиковую ситуацию в красном :

enter image description here

Он также позволяет анализировать блокирующие ситуации с течением времени.

Отказ от ответственности: Моя компания разрабатывает JProfiler

Смежные вопросы