背景
管理平台运行一段时间,发现机器访问不了,通过云管理同事的排查,发现管理平台java进程,生成的线程数过多,导致机器卡死。
通过如下命令查询,进程149120相关的线程数达到4000多线程。由于机器配置为8c 16g,直接将机器挂死。
ps -eLf | grep 149120 | wc -l
问题排查
从现象来看,说明代码中存在线程泄露问题。开始排查问题:
1、使用jstat查看内存回收情况
jstat -gcutil 149120 1000 1000

观察一段时间,发现没有明显异常。
2、使用jstack打印线程信息
jstack 149120 > rea.info
发现里面有大量的Flink-RestClusterClient相关线程。

3、排查代码,找到交互的地方。
flink源码中,有如下线程池定义,用户客户端与flink交互,线程名称匹配。

接口API上已明确说明:

然后操作,观察线程数,发现正常,问题解决。
网友评论