Как выяснить, что удерживает блокировку и блокирует мой поток Java? - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Wildfly 11 с Java 8 на Amazon Linux.Мы устраняем проблему высокой загрузки ЦП и имеем в своем распоряжении инструмент CLI Wildfly.Я заметил, что некоторые из наших потоков Java работают довольно давно, и хотел выяснить, почему.Я нашел идентификатор одного потока и проверил его статус ...

[standalone@localhost:9990 /] /core-service=platform-mbean/type=threading/:get-thread-infos (ids=[2L])
{
    "outcome" => "success",
    "result" => [{
        "thread-id" => 2L,
        "thread-name" => "Reference Handler",
        "thread-state" => "WAITING",
        "blocked-time" => -1L,
        "blocked-count" => 48628L,
        "waited-time" => -1L,
        "waited-count" => 44877L,
        "lock-info" => {
            "class-name" => "java.lang.ref.Reference$Lock",
            "identity-hash-code" => 926576350
        },
        "lock-name" => "java.lang.ref.Reference$Lock@373a6ede",
        "lock-owner-id" => -1L,
        "lock-owner-name" => undefined,
        "stack-trace" => [],
        "suspended" => false,
        "in-native" => false,
        "locked-monitors" => [],
        "locked-synchronizers" => []
    }]
}

У меня нет четкого понимания всего, но кажется, что одна проблема - это блокировка - "имя класса"=>" java.lang.ref.Reference $ Lock ".Кто-нибудь знает, как я могу получить больше информации о том, что вызывает блокировку?

1 Ответ

0 голосов
/ 10 сентября 2018

Можете ли вы добраться до коробки с помощью SSH?

Если вы запускаете процесс Java с JDK (не JRE), вы можете проверить состояние потоков с помощью утилиты jstack.

Если да, вы можете получить дамп потока сразу всех потоков процесса, используя:

jstack <process_id>

Вы можете сохранить в файл, используя

jstack <process_id> > <file_name>

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

jstack не останавливает процесс.Безопасно запускать его на работающем процессе.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...