jdbc om.microsoft.sqlserver.jdbc.SQLServerDriver 受 DNS 解析速度影响,卡顿问题

问题原因是线上跑java的服务器接口从昨天晚上开始大量报超时,检查服务器负载及网络正常。后面通过一个/check健康检查接口找到慢的原因为与MSSQL数据库连接慢。
分析及解决步骤:
1、把/check接口与业务代码剥离,单独抽出jdbc连接的模块。
2、分别在多台不同的服务器上跑,发现有的服务器响应正常,有的需要5秒、10秒左右的时间。
3、通过sqlmd命令直接连接MSSQL服务器响应在0.05秒左右,非常快,排除网络问题。
4、查看系统DNS,有两个,其中一个为 202.96.128.166 ,ping不通,把这个DNS注释掉,再/check接口,响应时间正常。
5、多次替换不同DNS,确认为是其中一个DNS失效,导致java在请求的时候请求到这个DNS不通,等ttl超时后再请求另一个DNS,造成卡顿问题。
6、检查所有服务器系统DNS是否正常,修改为正常的DNS服务器ip.

后面需要研究一下为什么JDBC在使用ip的情况下,还是会走一次系统的DNS请求。

还有一个原因是系统hostname 没有加入到hosts文件中,导致hostname无法解析。