Обнаружение тупика с помощью JVMTI - PullRequest
0 голосов
/ 02 июня 2011

Интересно, возможно ли динамически обнаруживать взаимные блокировки в Java с помощью JVMTI.Существует два события, указывающих действия на мониторах с помощью оператора синхронизации:

Мониторинг указан Ввод

Отправляется, когда поток пытается войти в монитор языка программирования Java. уже получено другим потоком.

Указано, что монитор введен

Отправляется, когда поток входит в монитор языка программирования Java после ожидания его освобождения другим потоком.

Это означает, что в JVMTI я вижу только те мониторы, которые уже заблокированы.Я хотел восстановить график ожидания, но без событий, указывающих мне, что была получена блокировка, которая не удерживается любым потоком.Это невозможно.

Есть ли альтернативы?Команда SIGQUIT в Unix разрешает дамп потока, который отображает взаимоблокировки, кажется, что это невозможно в JVMTI.

1 Ответ

1 голос
/ 02 июня 2011

Вы сможете получить эту информацию через JMX.

Попробуйте

ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads();
...