一次线上网络问题的排查

现象描述

那天晚上项目准备发布预发环境,发布的内容是接入微信修改结算银行卡信息的接口,测试环境测试完全没有问题,但是发布到预发环境后发现功能不能用。那么问题来了,为什么测试环境没问题但是预发环境有问题呢?

排查步骤

1、查看日志发现是获取证书时网络请求失败,请求超时

一次线上网络问题的排查_第1张图片

 

2、查看代码找到报错的地方,查看okHttp客户端初始化是否设置了超时时间,发现设置了超时时间;其实不太可能是代码的问题的,因为测试环境都可以的话,大概率是环境问题。

一次线上网络问题的排查_第2张图片

3、找到发送的网络请求链接,发现是个https请求,猜测有可能是测试环境支持https请求,预发环境不支持https请求

一次线上网络问题的排查_第3张图片

4、登录预发机器使用curl命令访问该链接,发现返回Protocol https not supported or disabled in libcurl

curl https://api.mch.weixin.qq.com/v3/certificates

5、登录测试机器访问https://api.mch.weixin.qq.com,发现返回{"code":"PARAM_ERROR","message":"Http header信息不完整"},这个说明微信服务器已经接收这个请求并且返回了,只是请求参数有问题。说明测试环境是可以访问这个地址的

6、于是上网搜索解决了预发环境的curl不支持https问题,再次访问第3步的链接,发现请求一直得不到响应。说明此时https的问题已经解决了,怀疑是域名解析的问题。

8、为了验证是否是域名解析的问题,首先登陆测试环境的机器,ping一下https://api.mch.weixin.qq.com这个域名;

然后登陆预发环境的机器,ping一下这个域名发现ip确实不一样,说明是域名解析的问题

一次线上网络问题的排查_第4张图片

9、刷新预发机器的本地DNS缓存,然后再次ping https://api.mch.weixin.qq.com这个域名,发现ip仍然没有变化

10、其实当时解决问题走到第8步的时候发现ip解析有问题,应该先检查下本地的host文件是否手动写死了ip地址,如果没问题再去刷新本地的dns缓存。当时我们是先刷新了dns缓存才检查的本地host文件,确实是host文件手动写死了ip地址。

vi /etc/hosts

一次线上网络问题的排查_第5张图片

ok,问题解决。

你可能感兴趣的:(运维)