arthas实战之生产环境空指针排查
所属分类 arthas
浏览量 2798
空指针 ,没有具体的堆栈信息
空指针异常会被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的指标数据