由于项目用户量比较大,测试同事采用两百并发进行测试,在测试查过程中,查看jvm 虚拟机发现很多日志线程出现BLOCKED,

结果如下:

"http-saoma%2F192.168.6.162-8097-184" daemon prio=10 tid=0x00002aaab0ecc800 nid=0x2d7a waiting for monitor entry [0x0000000045fa9000]java.lang.Thread.State: BLOCKED (on object monitor)at org.apache.log4j.Category.callAppenders(Category.java:204)- waiting to lock <0x00000007800020a0> (a org.apache.log4j.spi.RootLogger)at org.apache.log4j.Category.forcedLog(Category.java:391)at org.apache.log4j.Category.log(Category.java:856)at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:304)

通过日志结果可以看出问题是出在org.apache.log4j.Category.callAppenders方法中,下面是该方法的代码:

/**Call the appenders in the hierrachy starting at<code>this</code>.  If no appenders could be found, emit awarning.<p>This method calls all the appenders inherited from thehierarchy circumventing any evaluation of whether to log or notto log the particular log request.@param event the event to log.
*/public void callAppenders(LoggingEvent event) {int writes = 0;for(Category c = this; c != null; c=c.parent) {// Protected against simultaneous call to addAppender, removeAppender,...synchronized(c) {if(c.aai != null) {writes += c.aai.appendLoopOnAppenders(event);}if(!c.additive) {break;}}}if(writes == 0) {repository.emitNoAppenderWarning(this);}}

我们从上面可以看出在该方法中有个synchronized同步锁,同步锁就会导致线程竞争,那么在大并发情况下将会出现性能问题,同会引

起线程BLOCKED问题。

那怎样解决这个问题呢?

我们可以使用Apache log 解决这个问题,代码如下:

private static final Log log = LogFactory.getLog("xxx");  

通过测试发现,以前org.apache.log4j.Category.callAppenders线程BLOCKED问题没有了。大家以后遇到这个问题可以采取这个方式解决。

使用apache log解决高并发下log4j引起大量线程block问题相关推荐

  1. Day783.网络通信优化之I/O模型:如何解决高并发下I/O瓶颈 -Java 性能调优实战

    网络通信优化之I/O模型:如何解决高并发下I/O瓶颈 Hi,我是阿昌,今天学习记录的是关于网络通信优化之I/O模型:如何解决高并发下I/O瓶颈. 提到 Java I/O,相信你一定不陌生. 可能使用 ...

  2. 怎么解决高并发下抢红包和商品超卖问题?

    一.场景模拟 在抢红包或秒杀商品的时候,肯定会有高并发的情况出现,程序中如果出现库存重复减扣的情况,那肯定是不行的!接下来模拟一下高并发下的库存重复减扣问题以及相应的解决方案. 1.  在测试前,需要 ...

  3. 高并发下log4j的性能瓶颈

    开篇  近期由于业务需要进行业务迁移,期间因为误设置log4j的日志级别,导致系统性能整体下降,具体表现在QPS下降明显,系统RT上升.迁移期间由于各类系统环境较原来有较大差别,因为在排查过程中也走了 ...

  4. java高并发日志_高并发下log4j的性能瓶颈

    开篇 近期由于业务需要进行业务迁移,期间因为误设置log4j的日志级别,导致系统性能整体下降,具体表现在QPS下降明显,系统RT上升.迁移期间由于各类系统环境较原来有较大差别,因为在排查过程中也走了一 ...

  5. redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...

    一. 问题 不知道大家该开发中有没有遇到这样的一个问题,在电影院购票或者去网上买东西的时候,比方说当年哪吒大电影出来的时候,那抢票相当火爆啊,一票难求,那购票系统的后台是如何保证观众能买到自己喜欢的票 ...

  6. 解决高并发下Redis连接失败redis.clients.jedis.exceptions.JedisConnectionException Attempting to read from a bro

    引出问题 当前Redis配置项 测压环境 出现的问题: redis.clients.jedis.exceptions.JedisConnectionException: Attempting to r ...

  7. 聊聊高并发下库存加减那些事儿——“异步扣减库存”

    聊聊高并发下库存加减那些事儿 不定期福利发放哦 聊聊高并发下库存加减那些事儿 背景 一般在日常开发中经常会遇到打折促销,秒杀活动,就如拼多多最近的4999抢券买爱疯11促销活动,毕竟谁的钱也不是大风刮 ...

  8. Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?

    AtomicInteger 在高并发下性能不好,如何解决?以及为什么会出现这种情况? 我们知道在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类 AtomicInte ...

  9. oracle 锁表如何解决_「技术分享」高并发下的接口幂等性解决方案

    高并发下的接口幂等性解决方案! 一.背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果.例如:前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果.我们发起 ...

最新文章

  1. vassist的安装
  2. poj 1961 Period(KMP)
  3. ASP.NET MVC笔记
  4. tensorflow 加载bert_用NodeJS/TensorFlowJS调用BERT实现文本分类
  5. 【瞎扯】 About Me
  6. cellphonedb 及其可视化
  7. 面向对象回顾(构造函数、覆盖和重载、Query接口的list方法和iterate方法、面向对象的六原则一法则、反射、内部类)
  8. 关于MCU、CPU扩展SDRAM的一个小知识
  9. Django进阶之中间件
  10. java取模多位数_JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)...
  11. BeanUtils对象之间的复制
  12. 关于在XP操作系统和IIS5.1环境下的MVC环境搭建之IIS错误
  13. 程序架构探讨—001 多段select语句的方案
  14. 深度学习入门(一)——深度学习如何入门?
  15. android硬件加速默认,Android的硬件加速
  16. 【Unity性能优化】ASTC压缩格式(Android)
  17. Dex.top“50计划”新玩法,能否让行业格局重新洗牌?
  18. 深度学习理论与技术的重点研究方向
  19. RAID5容量计算方式:单块磁盘容量*(n-1)
  20. qprocess qt 打开word_Qt QProcess启动和关闭外部程序

热门文章

  1. 计算机视觉算法——语义分割网络总结
  2. SQL Server 2016 COMPRESS 和 DECOMPRESS 函数
  3. 两个路由器如何构建局域网
  4. AD与DNS集成,且有备份AD与DNS,主AD与DNS坏,备份DNS如何成为主
  5. 关于小米手机无法将照片添加到图库解决方法
  6. 成成你好呀(C知识点整理二)
  7. 【Python】np.where()替换缺失值
  8. webgoat全关教程手册
  9. 如何清除(登录)缓存
  10. (数据库系统)(十一)并发控制