java异常的排除方法

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缓存

posted @ 2019-12-05 22:31  那只狐狸  阅读(468)  评论(0编辑  收藏  举报