log4j2性能提升点

1、log4j1写日志多线程情况是阻塞的,log4j2不会阻塞,生产者只负责生产,通过无锁队列ringbuffer的无阻塞内存队列作为缓冲(即使用Disruptor),多生产者多线程的竞争是通过CAS实现,性能较高,至于最后落地,虽然两者都会调用synchronized方法写入日志,log4j2的asynclogger支持多个消费者,每个消费者取一批待处理的日志,类似于分段,用于提高性能

2、Disruptor简介:
log4j2之所以能在异步写日志时性能提高这么多,离不开优秀的mq组件disruptor。
disruptor的主要设计思想是无锁的高并发,在设计上采用内存屏障的机制和CAS操作实现此思想。主流的并发程序 
都离不开锁对资源的管控,或者尽量避开锁的使用。  
理解为以下三点:
 2、1有一个基于数组的循环数据结构(环装缓冲区)。这个循环数据结构,它是个拥有多个可用元素引用的数组。预先分配了对象内存空间。生产者与消费者通过这个循环数据结构进行读写操作,并不会有锁或资源竞争。

2、2在Disruptor中,采用消费者-生产者模型进行读写的分离,所有事件(events)以组播的方式被发布给所有消费者,以便下游队列通过并行的方式进行消费。因为消费者的并行消费,需要协调消费者间的依赖关系。

2、3生产者和消费者中有个序列计数器,指示缓冲区中当前正在被它所处理的元素。所有生产者或消费者都只可以修改它自己的序列计数器,但同时可以读取其他的序列计数器,内存屏障加序列号的方式实现了无锁的并发机制。

 

上述理解来源以下参考资料,顺序如下:

1、Log4j2的性能为什么这么好?(底层在哪块使用Disruptor):

https://www.jianshu.com/p/359b14067b9e

或博客专家  小程故事多_80的博文 ,标题为《 Log4j2的性能为什么这么好?》

2、   log4j2性能剖析(多消费者):

https://my.oschina.net/13426421702/blog/904249

3、[翻译]高并发框架 LMAX Disruptor 介绍

https://www.cnblogs.com/snifferhu/p/7513856.html

原文:https://www.baeldung.com/lmax-disruptor-concurrency

4、Log4j 升级Log4j 2 后的性能对于tps的提升效果和Log4j 性能慢的原因:

https://www.jianshu.com/p/483a9cf61c36

https://cloud.tencent.com/developer/article/1369663(收集未看)

5、Disruptor 极速体验demo:https://blog.csdn.net/cuiyaoqiang/article/details/46638871

 

你可能感兴趣的:(性能提升组件)