代码之家  ›  专栏  ›  技术社区  ›  StasM

JMX显示的线程比OS少得多

  •  2
  • StasM  · 技术社区  · 6 年前

    我有一个多线程的Java服务器,我在那里监视它使用了多少线程。最近,我注意到OS报告的应用程序线程比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相比,OS多了71个线程。虽然我可以假设Java可能运行一些JVM/JMX统计中未报告的工作线程,但70多个线程听起来似乎很多。这里有什么问题吗?这两个指标是不同的吗?可能有普罗米修斯虫吗?或者这些线程是正常的,如果是,它们到底在做什么?

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gray droiddeveloper    6 年前

    最近,我注意到OS报告的应用程序线程比JMX多得多

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

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

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