最近一周发现服务器上的服务存在JAVA线程持续创建但是不会自动复用、kill掉已有线程,超过容器允许创建的线程数后(比如1万、2万线程),整个服务失去响应了。
想了下自己代码里,有用Executor线程池,RestTemplate也用了连接池,想不出还有原因。于是去我司的监控中间件平台找思路。看了下java thread的暴增,是从一周前某个时间点开始的,于是又看了下那个时间点之前,我进行了发布操作,发布的是同事写的代码,这次变更的代码只是将poros client改成了直连es的配置。又看了下具体连接代码,如果不是直连es,使用的rpc客户端。如果是直连es,用的是es rest client。
这里产生的es rest client没用池化,每次使用的时候都会创建新的长连接。于是线程数就一直暴涨了吧。
网友评论