Так что это немного похоже на лапшу, и мне было интересно, есть ли у кого-нибудь идеи о вещах, которые я мог бы попытаться докопаться до сути этого.
JRE/JDK — 1.8.0_251, работает в Windows 10. Приложение — это приложение JavaFX, запускаемое с помощью launch4j.
Иногда, когда я выхожу из приложения, JVM не выключается. Вместо этого у меня зависает процесс в диспетчере задач, пока я его явно не закрою. Раньше было переодически, сейчас почти постоянно.
Я подозреваю, что у меня застрял пользовательский поток, который блокирует закрытие приложения. Однако мне не удалось собрать полезный дамп потока, чтобы узнать, могу ли я определить, где создается поток.
Когда я сталкиваюсь с этой ситуацией, я идентифицирую идентификатор процесса через список задач / wmic (JMC не видит процесс), затем я пытаюсь запустить против него jstack:
- «jstack -F» работает, но удаляет всю полезную информацию, такую как имена потоков или тип потоков (демон/пользователь). Ни один из потоков не содержит ссылок на мой код.
- "jstack -l" раньше работал, и я видел два затронутых потока с именем "pool-#-thread-#", которые не были потоками демона, но затем мне пришлось установить _251 JDK после того, как обновление JRE было отправлено на мою машину, и поскольку затем он просто зависает навсегда. (Я оставил его работать в течение нескольких часов, без изменений)
Если бы я мог получить возможность запустить jstack -l обратно, это помогло бы мне определить пул Executor, вызывающий это. Приложение порождает несколько разных пулов, и те немногие из них, которые я знаю, явно устанавливают флаг демона для потоков, которые они генерируют.
Интересно, что у меня похожая проблема при запуске приложения из Eclipse. Никто из других людей в моей команде не может воспроизвести эту проблему, и эта проблема началась только после того, как я получил новый ноутбук. Можно подумать, что если бы была закрепленная тема пользователя, другие люди увидели бы ту же проблему. Это заставляет меня думать, что может быть что-то связанное с окружающей средой/аппаратным обеспечением или что я могу вызвать ошибку JRE.
Кто-нибудь успешно устранил подобную проблему, когда jstack зависает? Любые приемы для получения дампа потока, когда приложение не может закрыться?