Верхняя команда - имя потока внутри процесса Java - PullRequest
2 голосов
/ 27 июня 2019

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

top -H -p [pid]

Моя проблема в том, что на моем компьютере top показывает имя потока, тогда как на сервере он показывает только java.

Мой компьютер: Centos 6.10 2.6.32-754.12.1.el6.x86_64

Сервер: Centos 6.9 2.6.32-696.18.7.el6.x86_64

То жеверхняя версия: 3.2.8

Та же версия java: "1.8.0_112"

Я пытаюсь избежать необходимости делать дамп потока и затем определять имена потоков.

1 Ответ

0 голосов
/ 27 июня 2019

Используйте jcmd <PID> Thread.print и выберите nid (Id Thread Id). (Включает как минимум 1 поток дампа.)

"Pinpoint-TcpDataExecutor(13-0)" #22 daemon prio=5 os_prio=0 tid=0x00007f14495d1000 nid=0x35 waiting on condition [0x00007f141c6ad000]
   java.lang.Thread.State: TIMED_WAITING (parking)

Затем следите за состоянием потока, используя /proc/<pid>/task/<nid>/status

cat /proc/24/task/53/status
Name:   java
Umask:  0022
State:  S (sleeping)
Tgid:   24
Ngid:   0
Pid:    53
PPid:   1
TracerPid:  0
Uid:    0   0   0   0
Gid:    0   0   0   0
FDSize: 512
...