getHostName引发的血案
因为是内部之间的服务调用,但是某次代码更改之后,发现时不时有首次调用超时。
找到罪魁祸首:
看了下代码的变化,其实就是有个同学丰富了下log,创建连接后把hostname也输出一下。
看了下getHostName的代码,是很坑的,因为它是惰性获取的。
文章图片
image.png 因为我们是通过ip去创建连接的,所以getHostName的时候,需要去dns去查询,而且ip查域名是反查,本地肯定是没有dns的缓存的,所以要去dns服务器解析。
如果网络不好,或者dns服务器比较忙的时候,就会比较慢一点了。
而且dns的超时时间是5s,也就是说最恶劣的情况下要等5s,自然就超时了。
【getHostName引发的血案】明明是通过ip请求,什么时候都没有的,所以不要作啊,搞个dns相关的,会增加很多的不确定性。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量