InetAddress.getLocalHost().getHostAddress() 反应慢 导致服务响应卡死
问题复现
第一步 修改DNS服务器地址 ,我们将DNS服务设置为网关地址,
vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
此刻在没有配置 /etc/hosts 的情况下
ping hostname 可以ping通
InetAddress.getLocalHost().getHostAddress() 可以获取到 ip地址
hostname -i 可以获取到ip
tip: 以上动作都非常慢
第二步: 从 /etc/hosts中删除hostname的映射
测试代码:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class LocalhostResolution{
public static void main( String[] args )throws UnknownHostException{
long start = System.currentTimeMillis();
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);
System.out.println(System.currentTimeMillis() - start);
}
}
解决方案:
第一种、配置DNS服务
[root@node140 ~]# vi /etc/resolv.conf
# Generated by NetworkManager
#nameserver 192.168.1.1
nameserver 114.114.114.114
第二种、/etc/hosts 中配置 hostname ip
root@node140 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomaii
192.168.1.140 node140