背景:线上Tomcat服务启动后很快出现数据库连接池已满未可用连接,第一感觉是因为SQL语句性能问题导致的堵塞,经排查Oracle数据库不存在阻塞信息异常。于是就有了通过java堆栈分析阻塞的过程。具体步骤如下,
step 1 :使用jstack生成堆栈信息
jstack -l pid > 1.log
step2:分析BLOCKED线程
定位BLOCKED线程:
"pool-4-thread-1" prio=10 tid=0x000000004882c800 nid=0x532 waiting for monitor entry [0x00000000430cf000]
java.lang.Thread.State: BLOCKED (on object monitor)
at

线上Tomcat服务因数据库连接池满而出现问题,排查后发现并非SQL语句导致。通过jstack分析发现BLOCKED线程与InetAddress.getLocalHost()相关。尝试解决方案一-Djava.net.preferIPv4Stack=true无效,然后调整Linux hosts文件,将localhost相关记录优化,服务恢复正常。问题解决关键在于正确配置hosts。
最低0.47元/天 解锁文章
1675

被折叠的 条评论
为什么被折叠?



