getHostName引发的血案

因为是内部之间的服务调用,但是某次代码更改之后,发现时不时有首次调用超时。

找到罪魁祸首:

看了下代码的变化,其实就是有个同学丰富了下log,创建连接后把hostname也输出一下。

看了下getHostName的代码,是很坑的,因为它是惰性获取的。


getHostName引发的血案_第1张图片
image.png

因为我们是通过ip去创建连接的,所以getHostName的时候,需要去dns去查询,而且ip查域名是反查,本地肯定是没有dns的缓存的,所以要去dns服务器解析。

如果网络不好,或者dns服务器比较忙的时候,就会比较慢一点了。

而且dns的超时时间是5s,也就是说最恶劣的情况下要等5s,自然就超时了。

明明是通过ip请求,什么时候都没有的,所以不要作啊,搞个dns相关的,会增加很多的不确定性。

你可能感兴趣的:(getHostName引发的血案)