Java - InetAddress.getLocalHost().getHostAddress() 踩过的坑!谨记 谨记
话不多说,先看代码:
... ...
LOGGER.DEBUG("-------- before srcIp to LOG--------");
InetAddress.getLocalHost().getHostAddress();//获取本机IP
LOGGER.DEBUG("-------- after srcIp to LOG--------");
... ...
本来平时一般也就是这样做的嘛,没啥问题啊;
结果,上周有同事去TW现场去不是这套代码的时候,发现这段代码执行特别慢,日志如下:
2019-01-24 16:28:01.115 [http-nio-11007-exec-10] DEBUG c.xxx.adapter.downlink.DownlinkServiceImpl - -------- before srcIp to LOG--------
2019-01-24 16:28:57.158 [http-nio-11007-exec-10] DEBUG c.xxx.adapter.downlink.DownlinkServiceImpl - -------- after srcIp to LOG--------
问题定位出来,发现在这个 InetAddress.getLocalHost().getHostAddress()地方。足足花费了一分钟的时间,什么鬼,在我们自己服务器上都是几毫秒就执行完了的呀!
有网友说:
执行慢的原因估计是DNS的问题,因为以前没有这问题,最近时好时坏,有时根本没问题,而最近因有的域名无法访问,添加了其它DNS后可以访问了,但DNS变了后解析本机地址也变慢了
我个人认为:
客户方部署这套代码是在K8S环境下的,k8s的网络本来就十分复杂,很有可能因为复杂的网络在DNS解析下变的更加缓慢而造成的。后来就果断的将这个获取本机ip的代码,换成获取配置文件中的配置ip来替代,从而避免了这个性能问题。