JMX показывает гораздо меньше потоков, чем ОС

У меня есть многопоточный сервер 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.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Recently, I have noticed that OS reports many more threads for the app than JMX

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

Is there something wrong here? Are those two measuring different things? Is there a Prometheus bug maybe? Or these threads are normal and if so - what exactly they are doing?

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

Другие вопросы по теме