我最近在运行 Java 进程时遇到了客户迁移到 Linux(64 位)的问题。
该进程产生了数千个线程,其中大多数线程的标识符为 futex。我查看了 futex (快速用户空间互斥锁),它是实现基本锁定的 Linux 构造。
代码最近更改为实现 BlockingQueue 和 ExecutorService 以生成子线程,但子线程的数量由配置设置控制,我可以证明这种特定机制并没有失控。我只能假设由于 BlockingQueue 和一些锁,JVM 内部的某些东西正在产生所有这些线程?
那么谁能告诉我如何找出这些线程实际上是什么以及我可以做些什么来控制/停止它们?
以下是进程列表的几行;必须终止进程之前的实际列表超过 13000 行。
0 - 54321 447 446 1 - - - 5953085 - ? 00:15:50 java
0 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
任何建议都欣然接受。