1.
现象:CPU占用100%
猜测:线程执行了死循环,且不含执行io中断的操作
处理方式:整个机器全cpu占用100%,如果是web应用 可以nginx的心跳检测功能做转移;在CPU自己化解后通过jps、top -pH jstack>1.txt排除
2.
现象:响应越来越慢、内存占用越来越大,甚至出现OOM
猜测:死锁-----jvm上synchronized的错误使用,lock和notify的先后顺序逻辑错误
处理方式:线程池的场景下 jstack隔时间段的对别,对比线程的waiting/block状态;或者看哪个线程存活的时间最长;
3.排除bug的思路
重要性:开发工作是排除bug的路上和排除bug中
3.1 不要猜 要看上游和下游的日志,或者用看的日志证实自己的猜想
3.2 分而治之 断点
3.3 根据间歇性bug发生的时间点或者触发事件找规律
3.4 控制变量法:一次只修改一个地方 来排除,排除后记得改回来,排除前记得要备份
3.5 把目的、做的操作记录下来,避免慌乱和混乱
3.6检查插头:以为一定不会出错的地方很可能就是出错的地方
3.7亲眼看到问题,比如报“文件不存在”的错误,事实上可能是没有权限或者路径不对
3.8 头脑风暴,听取别人的观点
3.9 大众的异常问百度,小众问谷歌
4. 工具
4.1阿里的arthas
4.2 jperftools.jar
4.3 《调试九法 软硬件错误的排查之道》书
5.疑难杂症故障原因
5.1文件编码
5.2缓存
原文:https://www.cnblogs.com/hzq3554055/p/11992525.html