如何解决毫无头绪的线上问题

线上问题分类:功能性问题,性能性问题.也就是说,一个能直接看到症状,一个看不到症状.

按医学诊断流程:判断科目,收集指标,分析指标,预判故障,验证故障,解决原理,给出方案,实施方案,检查结果.

一.收集信息

能直接看到症状的问题都不是大问题,基本上可以通过日志,梳理流程,判断是哪部分出现的bug.

看不到症状的问题,比如响应时间越来越长,QPS越来越低,隔三差五就宕机.这种非功能性的bug.对问题进行分类:

是否资源不够用? CPU/内存/磁盘/数据库/网络带宽/JVM堆内存.

为什么不够用?初始太小?逐步填满?没有释放?就需要一个检测工具对当前的系统进行分析.

常用的有visualvm/arthas/jstack/jconsole.