JMX показывает гораздо меньше потоков, чем ОС - PullRequest
0 голосов
/ 02 мая 2018

У меня есть многопоточный сервер Java, где я отслеживаю, сколько потоков он использует. Недавно я заметил, что ОС сообщает о гораздо большем количестве потоков для приложения, чем JMX. Например:

cat /sys/fs/cgroup/pids/system.slice/NAME.service/pids.current 294 ps -eLf | grep java | grep NAME | wc 294 curl -s localhost:9102 | grep jvm_threads_current 223.0

Где находится порт 9102 Прометей Агент JMX. Итак, мы видим разницу в 71 поток - ОС видит 71 дополнительный поток по сравнению с JMX. Хотя я могу предположить, что Java может запускать некоторые рабочие потоки, о которых не сообщается в статистике JVM / JMX, более 70 потоков звучат как много. Здесь что-то не так? Эти две вещи измеряют разные вещи? Может быть, есть ошибка Прометея? Или эти темы нормальные и если да - что именно они делают?

Версия JVM 1.8.0_162-8u162-b12-1~deb9u1-b12 работает в Linux.

1 Ответ

0 голосов
/ 02 мая 2018

Недавно я заметил, что ОС сообщает о гораздо большем количестве потоков для приложения, чем JMX

При написании простой основной программы я вижу то же самое. JMX говорит, что у меня 12 потоков (основной, GC, финализатор, JMX, ...), а ps -eLf говорит, что у меня 29. Я никогда не замечал этого несоответствия, вероятно, потому что я обычно использую ps -a вместо -e команда стиля.

Здесь что-то не так? Эти две вещи измеряют разные вещи? Может быть, есть ошибка Прометея? Или эти темы нормальные и если да - что именно они делают?

Я думаю, вы заглядываете за завесу в том, как ОС управляет потоками Java, и вам не о чем беспокоиться. Количество процессов, используемых ОС против потоков Java, будет сильно зависеть от вашей версии Java и реализаций собственных потоков ОС. Я не думаю, что они «делают» что-то, но, скорее всего, они там по какой-то причине, связанной с учетом ОС, о которой вам не нужно беспокоиться.

...