一场HttpClient调用流未关闭引发的java 程序假死

生成环境突然假死,nginx 也打不过去,nnnnnnnn  以为是启动时间久了 ,随手在启动,没过几分钟 程序继续假死,

查看nginx 日志 有很多请求,所以问题无法进行定位,但是 程序没有报错,

jps 查询Jvm进程号
jstack -l xxxxx  查询线程栈信息

根据你自己的报名去在log 文件了去查找 会查找到相关错误信息的一场HttpClient调用流未关闭引发的java 程序假死_第1张图片

问题处理:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  查看等待的连接

根据栈的错误信息,线程都被waiting 阻塞了 根据日志中提示的controller 位置进行定位到 doGet 方法中 response  没有close 

关闭的操作,导致HttpClient连接池的连接一直没有回收回去,后面的线程又一直在调用这个doGet方法;
但是又获取不到连接,所以就一直阻塞在哪里,直到连接超时

一场HttpClient调用流未关闭引发的java 程序假死_第2张图片

 

 

你可能感兴趣的:(java,java,java,假死,http未关闭导致假死)