首页  

arthas实战之生产环境空指针排查     所属分类 arthas 浏览量 214
空指针 ,没有具体的堆栈信息
空指针异常会被jvm优化掉 ,具体参考这篇文章
 JVM异常优化Fast Throw 与 OmitStackTraceInFastThrow 参数  
OmitStackTraceInFastThrow 参数不能动态修改

因为没有异常堆栈信息,不知道具体是哪一行报的NPE
只能在调用链路上逐个方法 watch

watch  a.b.c   methodXXX '{target,params,throwExp}'  -e 
watch  a.b.c   methodXXX '{target,params,throwExp}'  -e -x 2

-e 抛异常时触发
-x Expand level of object (1 by default)  
-x 2   对象输出2层

遍历对象输出所有字段的值  静态 实例 私有 的变量全都会输出

最后定位到问题
并发读写缓存里的某个list引起的, 
并发读写导致 空指针 和 并发修改异常  ConcurrentModificationException

可以使用并发集合 譬如 

CopyOnWriteArrayList 
CopyOnWriteArraySet
ConcurrentSkipListSet
ConcurrentHashMap

这个list 初始化之后应该是不能修改的 , 但是后来加了某个功能,动态往里面添加数据了
对于这种不可变的集合 ,也可以使用
Collections.unmodifiableList
 
 arthas watch 使用 

上一篇     下一篇
springboot2 feign 实例

feign消费端注解使用说明

JVM异常优化Fast Throw 与 OmitStackTraceInFastThrow 参数

java并发包JUC简介

身材就是你的名片

SpringBoot的指标数据