[错误] 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
Executors.newSingleThreadScheduledExecutor().schedule(...);重现错误
- 启动具有MU协议启用的PowerJob 5.1.2工作程序或服务器。
- 持续通过
MuTransporter.ask发送请求。 - 使用
jcmd <pid> Thread.print或jstack <pid>监控JVM线程。 - 观察每个请求都创建了一个名为
pool-N-thread-1的新线程。 - 当超时任务执行或不再需要时,执行器线程仍然等待在
ScheduledThreadPoolExecutor$DelayedWorkQueue中。
内容来源: PowerJob/PowerJob