两次线上排查经历,每次都浪费了我很多时间。因为没有做个这个,所以像菜鸟一样,效率极低。
后来我自己也反思了一下,然后又闻了一下别人是怎么线上排查错误的。下面是对自己两次线上排查错误的反思。
第一:遇到问题不要慌张
因为线上是正式的用户环境,所以一旦出现问题,心里面的压力就比较大。会出现慌张。慢慢的要克服。冷静下来反而更有利于排查错误。
第二:根据报错去逐步分析。
先在前端查看错误消息,报什么异常。
判断是前端错误还是后端错误。然后找到错误的类或者方法,这是最简单的了,只需要到这个方法里面去查看代码就好了。
如果前端没有异常那就要到日志里面去查看了。所以说线上系统一定要把日志合理的打印出来。把error、waring、info分别输出
。每天的日志单独放一个文件。合理的日志分类有助于出现问题时我们能通过日志更快的定位到问题。
如果日志里面有错误打印,那我们就可以根据日志报错去定位到对应错误的位置。然后去修改。
第三:如果前端错误的话,直接修改就好(前端不太好,这部分就不写了。我一般遇到的都是修改一下基本就成功了)
如果是后端错误,检查以后发现代码没什么问题,那我们就需要在自己怀疑可能出错的点埋点了。埋点的时候一定要争取一次搞定,在每一个不能100%确保不会出问题的点埋点。然后把线上服务中的一台服务重新部署,去检测到底那一步出了问题。(如果服务没有做负载均衡,那只能是停掉服务了。)
第四:根据日志输出结果定位到出错误的地方,然后修改就好了。
如果最终检测代码都没问题,那就要去看服务器了。
首先看看内存 命令:free -h 检测剩余内存是多少,内存是不是满了
然后看看那个线程占用内存比较多:top - h
看看是不是系统中有调用第三方资源忘记关闭连接的(这个很可能导致内存占满)
目前遇到的问题通过上面几步基本上都解决了。