【问题标题】:JMX showing much less threads than OSJMX 显示的线程比 OS 少得多
【发布时间】:2018-05-01 23:40:30
【问题描述】:

我有一个多线程 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 端口托管Prometheus JMX 代理。所以我们看到区别在于 71 个线程 - 与 JMX 相比,操作系统看到了 71 个额外的线程。虽然我可以假设 Java 可能会运行一些未在 JVM/JMX 统计中报告的工作线程,但 70 多个线程听起来很多。这里有什么问题吗?这两个衡量的是不同的东西吗?可能有普罗米修斯错误吗?或者这些线程是正常的,如果是这样 - 它们到底在做什么?

JVM 版本是1.8.0_162-8u162-b12-1~deb9u1-b12 在 Linux 上运行。

【问题讨论】:

    标签: java multithreading jmx prometheus


    【解决方案1】:

    最近,我注意到操作系统报告的应用程序线程比 JMX 多得多

    在编写一个简单的主程序时,我看到了同样的情况。 JMX 说我有 12 个线程(主线程、GC、终结器、JMX,...),而 ps -eLf 说我有 29 个。我从未注意到这种差异可能是因为我通常使用 ps -a 而不是 -e样式命令。

    这里有什么问题吗?这两个衡量的是不同的东西吗?可能有普罗米修斯错误吗?或者这些线程是正常的,如果是,它们到底在做什么?

    我认为您是在窥视操作系统如何管理 Java 线程的面纱,不必担心。操作系统与 Java 线程使用的进程数在很大程度上取决于您的 Java 版本和操作系统本机线程实现。我不认为他们在“做”任何事情,但很可能是出于某些您不需要关心的操作系统会计原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 2012-01-24
      • 2021-03-27
      相关资源
      最近更新 更多