现象:
SpringCloud 微服务于全新的虚拟机之上予以部署,以前几秒就启动好了,然而在新服务器上启动之际,起初并无日志打印呈现,需历经 1 至 2 分钟,方可有启动日志的打印输出。
定位:
借助 jstack 工具,抓取启动时的现场池,察知存在如下线程处于长时间的运行状态。
发现如下异常代码:java.net.Inet4AddressImpl.getLocalHostName
解决:
1、 以 root 账号,进行“more /etc/hostname”的查看操作;
2、修改/etc/hosts 文件,将上一步主机名,添加到该文件中:
3、重启微服务,问题解决。
总结:
走了很大一段弯路,其实对于这种程序卡死的现象,最佳解决方案就是分析tomcat堆栈,通过线程的信息来找解决办法,其它办法相对来说花费的时间很多,也可能找不到问题原因。
另外,这个现象并不是在所有机器上都存在,在有些机器上,即使没有在hosts文件中配置自定义hostname的映射,程序也会正常运行,可能是jdk内部还依赖别的环境配置,暂时还没有定位到原因。
本文暂时没有评论,来添加一个吧(●'◡'●)