Что такое nid в jstack на MacOS - PullRequest
       1

Что такое nid в jstack на MacOS

0 голосов
/ 24 сентября 2019

В Linux / HotSpot VM, top -H может перечислять все потоки некоторого Java-процесса, поэтому можно определить идентификатор потока занятого потока, поэтому я могу использовать этот идентификатор потока, чтобы найти поток Java в выводе jstack (nidв jstack - шестнадцатеричный перевод идентификатора потока в верхнюю -H).

В то время как реализация виртуальной машины Hotspot на платформе MacOS использует pthread_t как nid при использовании jstack для получения статистики потоков Java, и ничего подобногодо top -H на MacOS.Так есть ли способ найти "занятый" поток Java без MXBean?

Или кто-нибудь может сказать мне на MacOS, как я могу найти 'nid' занятого потока Java, в соответствии с которым я могу найти соответствующий поток Javaпо jstack?

1 Ответ

0 голосов
/ 25 сентября 2019

Небольшое исправление: в macOS nid - это не pthread_t, а скорее порт потока, полученный с помощью pthread_mach_thread_np(pthread_t).

В любом случае, в macOS нет эквивалента top -H, к несчастью.Но он вам не нужен, если вы просто хотите найти занятый поток Java.Вместо этого используйте профилировщик Java.

Вот как это сделать с async-profiler:

./profiler.sh -d 10 -t -f profile.svg PID

Это означает: профилировать процесс Java PID за десятьсекунд (-d 10) в поточном режиме (-t) и сохраните вывод в виде графика пламени в profile.svg.Вам даже не понадобится jstack - профиль уже выделит самые горячие потоки с их трассировками стека Java.

Flame Graph

КакВ качестве альтернативы Flame Graph вы можете выбрать «традиционный» вид дерева
, указав -f profile.html вместо -f profile.svg.

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