Дамп потока: что искать, чтобы определить поток, отвечающий за 100% CPU? - PullRequest
1 голос
/ 28 апреля 2020

Пытаясь решить проблему 100% -ной загрузки ЦП в большой системе, выполняющей одновременно сотни потоков, я создал дамп потока с помощью этой статьи Oracle Диагностика процесса зацикливания статья.

Чтобы найти , какой поток отвечает за такое высокое потребление ресурсов процессора, я знаю, что я должен сосредоточиться на потоках, которые находятся в состоянии RUNNABLE, но есть десятки из них. Так что это похоже на поиск иголки в стоге сена.

Что еще мне нужно искать среди всех этих потоков в состоянии RUNNABLE, чтобы сосредоточиться на конкретном потоке, который отвечает за 100% -ную загрузку ЦП

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Вкл. linux:
1. Вы можете получить самый занятый идентификатор потока с помощью команды: top -Hp $(pidof java)
2. И затем преобразовать идентификатор потока в шестнадцатеричный: prinrf "%x\n" {the tid}
3. Теперь, найдите шестнадцатеричный идентификатор в дампе потока, то есть в потоке, который потребляет больше всего ресурсов ЦП.

В других операционных системах Google Как найти самый занятый поток в процессе.

1 голос
/ 30 апреля 2020

Отличный ответ от @ meng Windows:

  1. Запустите Microsoft Process Explorer и сделайте снимок экрана, пока:
  2. Возьмите поток создайте дамп с помощью Ctrl + Break на консоли процесса Java.
  3. Найдите верхние TID, потребляющие ресурсы ЦП, на вкладке «Потоки» свойств процесса (в Process Explorer) и преобразуйте эти числа в шестнадцатеричные.
  4. Найдите эти шестнадцатеричные числа в дампе потока (отображаются как 'nid' == собственный идентификатор).
...