记一次压测异常问题排查
一. 起因
系统压测,罐了一部分数据,但是始终不处理,查询日志也没有异常日志,很不正常。
二. 问题排查
首先就是加各种日志去线上定位是哪里问题,代码模型如下:
private boolean recoverTask(List<byte[]> list) {
try {
// 第一处日志
log.error("recoverTask===" + JSON.toJSONString(list));
Object object = unPackParam(List<byte[]> list);
// 第二处日志
log.error("recoverTask===" + JSON.toJSONString(object));
} catch(Exception e) {
// 第三处日志
log.error("recoverTask error:", e);
}
}
public static Object unPackParam(List<byte[]> list) {
// MessagePack序列化操作
......
}
问题分析:第一处日志打了,第二处日志没打,第三处日志没打。但是问题定位应该是序列化抛了异常,可是为啥第三处日志没打了?
- 怀疑是不是log4j日志文件有问题了?排查没有问题。
-
怀疑是不是线程夯死了?打jstack,排查没问题。
这个时候很绝望,这个问题搞了大半天了,各种日志也加了很多了。最后经过指点,把Exception换成Throwable,没打日志说明不是Exception。重新上线,复现,日志出来了。报的错是:java.lang.NoClassDefFoundError。一个类MessagePack没找到,后面再去看war包,再去排查pom文件,问题解决。
三. 问题总结
对于运行时,也会产生Error,不要下意识的认为就是Exception,还是理解不够深刻。