查看“Log4j 2 无垃圾模式”的源代码
←
Log4j 2 无垃圾模式
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
https://www.bilibili.com/video/BV1iJ411H74S?p=35 === Log4j 2 的性能 === Log4j 2 最牛的地方在于异步输出日志时的性能表现,Log4j 2 在多线程的环境下吞吐量与 Log4j 和 Logback 的比较如下图。 下图中比较中 Log4j 2 有三种模式: # 全局使用异步模式; # 部分 Logger 采用异步模式; # 异步 Appender [[文件:异步日志吞吐量.png|无|缩略图|757x757像素]] 可以看出在前两种模式下,Log4j 2 的性能较之 Log4j 和 Logback 有很大的优势。 === 无垃圾记录 === 垃圾收集暂停是延迟峰值的常见原因,并且对于许多系统而言,花费大量精力来控制这些暂停。 许多日志库(包括以前版本的 Log4j)在稳态日志记录期间分配临时对象,如日志事件对象,字符串,字符数组,字节数组等。 这会对垃圾收集器造成压力并增加 GC 暂停发生的频率。 从版本 2.6 开始,默认情况下 Log4j 以“无垃圾”模式运行,其中重用对象和缓冲区,并且尽可能不分配临时对象。 还有一个“低垃圾”模式,它不是完全无垃圾,但不使用 ThreadLocal 字段。 Log4j 2.6 中的无垃圾日志记录部分通过重用 ThreadLocal 字段中的对象来实现,部分通过在将文本转换为字节时重用缓冲区来实现。 ==== Log4j 2.5: memory allocation rate 809 MB/sec, 141 minor collections. ==== [[文件:Log4j 2.5 内存分配率和次要垃圾回收测试.png|无|缩略图|991x991像素]] “Allocation Rate for TLABs”每秒进行 809.58MB 的内存分配;[[Allocation Rate for TLABs]] “Garbage Collections”进行了 141 次 minor collection(次要垃圾回收/小型垃圾回收,区别于 Full GC) ==== Log4j 2.6 did not allocate temporary objects: 0 (zero) garbage collections. ==== [[文件:Log4j 2.6 不分配临时对象零垃圾回收.png|无|缩略图|991x991像素]] === 禁用无垃圾日志 === https://logging.apache.org/log4j/2.x/manual/garbagefree.html#disabling-garbage-free-logging 有两个单独的系统属性可用于手动控制 Log4j 用于避免创建临时对象的机制: *<code>log4j2.enableThreadlocals</code> - 如果“true”(非 Web 应用程序的默认值)对象存储在 ThreadLocal 字段中并重用,否则(false)将为每个日志事件创建新对象。 *<code>log4j2.enableDirectEncoders</code> - 如果将“true”(默认)日志事件转换为文本,则将此文本转换为字节而不创建临时对象。注意:由于共享缓冲区上的同步,在此模式下多线程应用程序的同步日志记录性能可能更差。如果应用程序是多线程的并且日志记录性能很重要,请考虑使用异步记录器。
返回至
Log4j 2 无垃圾模式
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息