Intellij 运行 Java 程序启动等待 BUG 分享
Intellij 运行 Java 程序启动等待 BUG 分享
最近公司新配了一台 Mac 本,性能相比之前自己的 Mac 本提升了很多,在配置基础运行环境之后,我运行了一下自己的项目,发现了一个巨大的问题。
我居然无意中触发了一个JDK
的BUG
。
现象
打包编译代码非常快,但是在使用其他功能,甚至只是引入log4j2
日志功能之后,会显得启动非常慢,通常能达到好几秒才能在控制台看到输出信息,这一点极不寻常。
PS:不是log4j2
的问题,当时把终点怀疑对象放在了log4j2
上了。
排查
我一开始以为是自己导入旧电脑的配置到底的,后来发现不是。中间怀疑过很多方面,甚至系统我都升级了一下,也没有解决问题。在经历了各种JVM
调优文章的洗礼之后,我也开始放弃了这条思路。转而往我不懂的领域搜索答案了。
按照网上大佬的排查流程,我走了一遍,发现在启动之前我做了一些事情,有一些配置的初始化程序,如下:
这里比较重要的一点就是LOCAL_IP
,在获取LOCAL_IP
的方法中,我是这么写的:
这是一个非常简单的方法,我居然发现这个地方居然执行了5s
,然后我把改代码注释掉了,相关的功能暂时也关闭了。
可问题依然存在,除了System.out.println(“FunTester”);
代码以外,其他添加任何功能都会带来启动时间的猛增,即使我只增加了日志打印功能。
真相大白
在常规方法失效以后,我只能去stackoverflow
求助了。申请的事情就这么发生了,原来早就有不少人遇到这个问题,不过看起来他们比较严重,据资料显示有等待30s
甚至60s
之久的。
下面是某个提问者所做的排查工作:
然后底下大佬们给出了答案,具体解释如下:
据资料显示,这个应该在 2017 年就已经出现了,用英文搜索,其实很容易得到答案的。
具体的解释如下,这是一个JDK
的BUG
,不错,这就是一个openJDK
的BUG
。
由于Java
程序获取本机地址的时候出现错误,导致5s
等待(这个应该是默认超时时间),然后再加上重试机制,所以报告的等待时间基本都是5s
的整数倍。
修复方案
方案 1:
添加下面内容到/etc/hosts
文件中
方案 2:
通过设置别名实现
sudo ifconfig en0 alias 127.0.0.1 alias 127.0.0.1
方案 3:
升级JDK
版本,目前搜到的资料上,问题出现在7
和8
的部分版本(尚不确定)。理论上可以通过补丁解决,也有人开发了,谨慎起见,这个方案可以往后排。
我采取了方案 1,已经完美解决了这个问题。
附上一张我的网络IPv6
测试图:
FunTester,腾讯云年度作者、Boss直聘签约作者,GDevOps官方合作媒体,非著名测试开发 er。
版权声明: 本文为 InfoQ 作者【FunTester】的原创文章。
原文链接:【http://xie.infoq.cn/article/cd4b0d17105afc04e5fb90ebb】。文章转载请联系作者。
评论