侦探般的程序员之一
背景:一个接口项目,测试环境正常,发布到正式环境后,发生错误,没有加错误日志.
错误现象,
1.该项目某接口报错,其它接口正常,传入错误认证token正常提示Token错误.
2.该接口测试环境速度较快,在正式环境中报错时十分缓慢
3.因为生产环境有多台服务器,手动修改host指向后 有时能正常调用接口返回正确信息
问题分析:
1,因为需要在配置文件中增加新的节点,开始怀疑为节点未配置或配置错误..拿到正式代码后排除
2.怀疑代码错误 在本地搭建模拟正式环境后排出
3.但反复修改host 未能获得一致复现结果 出现随机故障 因为host的缓存机制不完全清楚 有时需要重启电脑才能解决 (有个小的技巧是 每次修改host 可以修改到一个完全不存在的ip 如果出现问题 证明host修改生效 再改成需要改的)
问题排查无果后,只能麻烦运维重新发布加入错误日志的版本,重新调用
错误很简短:请求超时 四个字瞬间解决了我所有的疑惑
应该是某接口使用了一个链接地址,然后服务器访问不到这个链接地址,报错时时间缓慢也是因为超时的原因 生产多台环境可能配置的许可不一样
于是翻看相关代码 确认是使用了一个新的域名 ,联系开发接口的小伙伴给我一个能直接在浏览器打开的测试地址 联系接口提供方请他看下是不是有做访问ip限制 联系网络部相关人员请他们看是不是我们服务器限制了某些域名访问
结果:
1.小伙伴给我的测试地址在本地能够正常访问返回数据,同一网段另一台服务器不行
2.接口提供方表示没有做限制
3.网络部查看并修改配置后 测试地址能在同网段服务器打开
4.重新测试程序 正式环境程序正常 问题解决
教训:
1.一定要写日志,至少要把错误信息返回(其它项目都有,这个项目其它接口都单独写了日志,但小伙伴没有注意到这个问题)考虑加上全局异常捕获
2.如果错误信息返回缓慢 并且设计到网络请求 优先考虑超时的问题
3.除了自己的代码,不要完全信赖任何东西(其实自己写的也不能信)