getHostName引发的血案

因为是内部之间的服务调用,但是某次代码更改之后,发现时不时有首次调用超时。
找到罪魁祸首:
看了下代码的变化,其实就是有个同学丰富了下log,创建连接后把hostname也输出一下。 看了下getHostName的代码,是很坑的,因为它是惰性获取的。

getHostName引发的血案
文章图片
image.png 因为我们是通过ip去创建连接的,所以getHostName的时候,需要去dns去查询,而且ip查域名是反查,本地肯定是没有dns的缓存的,所以要去dns服务器解析。
如果网络不好,或者dns服务器比较忙的时候,就会比较慢一点了。
而且dns的超时时间是5s,也就是说最恶劣的情况下要等5s,自然就超时了。 【getHostName引发的血案】明明是通过ip请求,什么时候都没有的,所以不要作啊,搞个dns相关的,会增加很多的不确定性。

    推荐阅读