跳到主要内容

开发过程中遇到问题如何排查?

个人总结,如有问题,积极讨论。

网络问题

应具有的知识背景

OSI七层模型与TCP/IP五层模型 image

常见的HTTP请求路径(带域名)

该路径只是大概的情况,因为网络路径的复杂程度是无法简单摸清的,而且很多路径中的网络设备对用户来说是透明的。 浏览器输入----【浏览器缓存】----【本机DNS缓存】----通过DNS服务解析得到IP----网关----【正向代理】----【CDN】----【反向代理】----实际服务----存储(各种存储数据的媒介:数据库、缓存等等)

如何排查和快速定位?

遇到问题时,根据问题的情况,选择合适的方法,往往还需要多个方法结合进行排查和定位问题。

排除法

适用于无法一下子确定具体原因的情况。 如果一个地址突然打不开,那你可以把地址发给同事或者使用自己的手机移动网络尝试打开。

  • 别人能打开就是自己的网络异常
  • 别人不能打开,那么大概率就是服务异常

日志分析法

适用于知道某个服务出问题,但不确定具体原因的情况。 一般的服务都会有日志输出,方便排查问题,如果知道哪个服务出了问题,那么去查看她的运行日志一般就能知道具体原因。

数据模拟法

适用于一些特定条件下才出现的问题,需要指定条件的情况。 如果问题在特定条件才发生,那么模拟那个出现问题的环境是比较好定位问题的方法。

抓包法

适用于非常用协议,或协议对接开发的情况。 如果在协议对接过程中数据无法识别,通过抓包与标准的例子进行数据对比,能看出问题所在。 常见软件:wireshark

经验法

适用于已经踩过的坑。

链路跟踪法

适用于有完善的链路跟踪服务部署情况。 到链路服务查看数据,就能快速定位。

非网络问题

这里指开发中的程序问题,不涉及与其它服务交互。

如何排查和快速定位?

遇到问题时,根据问题的情况,选择合适的方法,往往还需要多个方法结合进行排查和定位问题。

Debug

函数不及预期时,通过调试断点查看运行时数据,就能准确定位问题。

Log

在无法打断点的时候,通过打log能实现相同效果。

单元测试法

如果修改的函数早已配套单元测试函数,那么运行一下单元测试,更快发现问题。