首页 记录一次Java应用Hang住的问题
文章
取消

记录一次Java应用Hang住的问题

问题

运维新建了一个灰度集群,当他们在部署第一个应用时, 应用启动后Hang住,无法向下执行。日志也不再打印。当时将几个远端的连接地址给telnet过,发现都正常。 而且CPU使用率低。

这时候就使用到了 jstack 命令,打印java线程执行情况。

我们可以看到 main 线程还是 RUNNABLE 状态,当时第一时间也没怀疑是 MySQL 的问题,毕竟 telnet MySQL 时,网络是通的。但是我也找不到其他的问题。就将 jar 放到了其他的服务器上进行执行。发现是正常运行。

这啥时候就开始怀疑新的集群机器有问题了。再结合上 jstack 中的日志。开始怀疑可能是 MySQL 的网络问题。 然后就加上了jdbcUrl中加入 connectionTimout 的配置,但是应用还是 hang 住。再加上了 socketTimeout , 启动后就报错了。这时候找到 DBA ,DBA发现新的机器的IP和以前的机器IP不处于同一个网段。然后新增了白名单设置。应用就正常启动了。

为什么没加白名单, MySQL 的 TCP 连接能够建立起来? 为啥呢?

回答:

vpc链路没加白名单能telnet能通是正常的,服务端拦截的是第三个tcp握手包,telnet发出这个包判断成功,实际上后续的包都发不过来了,mysql业务层是连不上的

本文由作者按照 CC BY 4.0 进行授权

记录一次SpringBoot启动脚本命令行参数失效的问题

记录一次Java应用Hang住的问题