记一次压测异常问题排查

一. 起因

系统压测,罐了一部分数据,但是始终不处理,查询日志也没有异常日志,很不正常。

二. 问题排查

首先就是加各种日志去线上定位是哪里问题,代码模型如下:

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,还是理解不够深刻。

posted @ 2019-08-16 09:22  wudiffs  阅读(214)  评论(0编辑  收藏  举报