这篇文章描述了因为进程/单线程cpu瓶颈,导致Flink任务延迟的案例,并且分享了从最开始平台工作人员手动去服务器帮用户诊断,再到如何赋能给用户自助诊断的过程。
- 案例一:是TaskManager进程cpu使用率达到瓶颈的案例 (如果读者生产环境未开启cgroup可以跳过这个案例)
- 案例二:是TaskManager中某些线程的cpu使用率到达瓶颈的案例
案例一: 单TaskManager进程的CPU使用率瓶颈导致的任务延迟
现象及解决方案 :
平台上Flink任务延迟,最初我们通过去服务器上使用top + TaskManager的进程id命令,查看TaskManager的CPU使用率是否到达瓶颈。
- 如果到达瓶颈,这个任务可能是cpu密集型的任务,引导用户:
- 增加Flink任务的cpu核数或者并行度
- 通过火焰图之类的工具分析代码是否需要优化
- 查看任务是否fullgc (fullgc会占用很多cpu资源)
- 如果未到达瓶颈,这个任务可能是io密集型的任务,引导用户:
- 保持cpu核数不变,增加并行度,观察是否改善
自助诊断方案 :
提供用户TaskManager进程的cpu使用率 Metric,方便其自助分析任务是 cpu/