#1191·PowerJob

[错误] MuTransporter.ask 创建了无限数量的调度线程

作者: LabelZhou创建于 2026年8月2日更新于 2026年8月2日

描述错误

当MU协议启用时,每次调用MuTransporter.ask都会创建一个新的单线程定时执行器来处理请求超时。执行器引用会立即被丢弃,执行器永远不会关闭。因此,其核心线程在请求完成后仍然存在。持续的MUask流量会导致pool-N-thread-1线程数量和本机线程内存使用量增长,直到应用程序达到内存不足。有问题的代码位于: powerjob-remote/powerjob-remote-impl-mu/src/main/java/tech/powerjob/remote/mu/MuTransporter.java

java
Executors.newSingleThreadScheduledExecutor().schedule(...);

重现错误

  1. 启动具有MU协议启用的PowerJob 5.1.2工作程序或服务器。
  2. 持续通过MuTransporter.ask发送请求。
  3. 使用jcmd <pid> Thread.printjstack <pid>监控JVM线程。
  4. 观察每个请求都创建了一个名为pool-N-thread-1的新线程。
  5. 当超时任务执行或不再需要时,执行器线程仍然等待在ScheduledThreadPoolExecutor$DelayedWorkQueue中。

内容来源: PowerJob/PowerJob