一场HttpClient调用流未关闭引发的java 程序假死
生成环境突然假死,nginx 也打不过去,nnnnnnnn 以为是启动时间久了 ,随手在启动,没过几分钟 程序继续假死,
查看nginx 日志 有很多请求,所以问题无法进行定位,但是 程序没有报错,
jps 查询Jvm进程号
jstack -l xxxxx 查询线程栈信息
根据你自己的报名去在log 文件了去查找 会查找到相关错误信息的
问题处理:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看等待的连接
根据栈的错误信息,线程都被waiting 阻塞了 根据日志中提示的controller 位置进行定位到 doGet 方法中 response 没有close
关闭的操作,导致HttpClient连接池的连接一直没有回收回去,后面的线程又一直在调用这个doGet方法;
但是又获取不到连接,所以就一直阻塞在哪里,直到连接超时