1. 线程池任务排队时间与执行时间如何分开观测,队列深度上涨时应先调整 corePoolSize 还是队列容量
线程池任务排队时间与执行时间如何分开观测?队列深度上涨时应先调整 corePoolSize 还是队列容量?
- 排队时间/执行时间观测
- 队列深度
- 参数调整
分开观测:用 ThreadPoolExecutor 的扩展点(beforeExecute/afterExecute)记录任务开始/结束时间,或用任务包装器记录提交时间戳,计算"排队时间"(提交到开始)与"执行时间"(开始到结束)。也可用 JFR 的线程池事件或 Metrics 埋点。队列深度上涨时:先判断瓶颈是"线程不足"还是"消费太慢"。若活跃线程已满且排队时间增长,说明线程不够,先调大 corePoolSize/maxPoolSize;若队列深度涨但线程未满(任务被队列吸收),说明队列容量与线程数失配,再考虑队列容量。原则:先评估线程利用率,再调队列,避免混淆。
分开观测排队/执行时间才能定位瓶颈。先看线程是否吃满,再决定调线程还是队列。