log4j性能瓶颈--记一次问题排查

问题现象

压测过程中,客户端10线程,服务端100个线程,客户端不断向服务端发送请求,服务端多个请求超时。
异常堆栈如下:
在这里插入图片描述

排查过程

  1. top查看CPU使用率,CPU卡在50%,上不去,一般是由于竞争锁导致CPU使用率低
    log4j性能瓶颈--记一次问题排查_第1张图片
  2. jstack pid 打印线程堆栈,发现多个线程卡在了Category.callAppenders方法
    在这里插入图片描述
  3. 查看log4j源码,如下所示:
    log4j性能瓶颈--记一次问题排查_第2张图片
    一个Category就是一个Logger,每次打日志,都会锁住Logger对象。高并发情况下,多个线程竞争锁,导致线程阻塞,请求超时。

总结

log4j存在性能瓶颈,应用并发高的情况下,尽量调高日志级别。或者,考虑升级日志框架为logback或者log4j2。

你可能感兴趣的:(故障排查)