线上机器CPU占用高分析实践

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

本文分析了线程的两种状态:WAITING和TIMED_WAITING。WAITING状态表示线程在等待特定操作,而TIMED_WAITING状态则是在指定时间内等待条件。通过代码分析,发现并发任务存在性能问题,建议优化线程池逻辑和异常处理,以减少CPU资源浪费。

🎯

关键要点

  • 本文分析了线程的两种状态:WAITING和TIMED_WAITING。
  • WAITING状态表示线程在等待特定操作,不会继续执行。
  • TIMED_WAITING状态表示线程在指定时间内等待条件,超时后自动返回。
  • 线程进入WAITING状态的常见情况包括调用Object.wait()、Thread.join()和LockSupport.park()。
  • 线程进入TIMED_WAITING状态的常见情况包括调用Thread.sleep()、Object.wait()和Thread.join()。
  • 在实际代码中,发现并发任务存在性能问题,建议优化线程池逻辑和异常处理。
  • 火焰图分析显示多次的stream调用导致CPU资源浪费,建议将toMap逻辑提到循环外。
  • 优化建议包括取消超时线程的执行,减少CPU资源浪费。
  • 观察到queryActTp处于WAITING状态可能是由于执行未取消,需进一步分析原因。
➡️

继续阅读