Log4j2AsyncLoggerConfig导致线程Block

 AsyncLoggerConfig 导致线程 Block

通过监控平台查看线程监控指标,从 Blocked 线程堆栈不难看出是和日志打印相关。分析异常线程堆栈 与(AsyncAppender 导致线程 Block)业务异常一样。

解析异常堆栈

Log4j2 关于日志的几个重要概念:

● ,日志配置标签,用于 XML 日志配置文件中,对应 Log4j2 框架中的 LoggerConfig 类,同步分发日志事件到对应 Appender。

● ,日志配置标签,用于 XML 日志配置文件中,对应 Log4j2框架中的 AsyncLoggerConfig 类,内部使用 Disruptor 队列异步分发日志事件到对应 Appender。

● Logger,同步日志类,用于创建同步日志实例,同步调用 ReliabilityStrategy处理日志。

● AsyncLogger**,异步日志类,用于创建异步日志实例**,内部使用 Disruptor 队列实现异步调用 ReliabilityStrategy 处理日志

       由于未配置 Log4jContextSelector 参数,所以使用的是同步 Logger,即通过 LoggerFactory.getLogger 方法获取的是 Logger 类实例而不是 AsyncLogger类实例,同时由于项目的 log4j2.xml 配置文件里配置了 标签,所以其底层是 Logger 和 AsyncLoggerConfig 组合

          AsyncLoggerConfig 处理日志事件,其内部使用 Disruptor队列,在生成队列元素时,由 translator 来负责填充元素字段,并把填充后的元素放入 RingBuffer 中,于此同时,独立的异步线程从 RingBuffer 中消费事件,并调用配置在该 AsyncLoggerConfig 上的 Appender 处理日志请求。

 AsyncLoggerConfig 提 供 了 带 有 Disruptor 队 列 实 现 的 代 理 类 即 AsyncLoggerConfigDisruptor, 在 日 志 事 件 进 入 RingBuffer 时, 由 于 项 目 使 用 的 是ReusableLogEventFactory,所以由 MUTABLE_TRANSLATOR 负责初始化日志事件,在此过程中会调用 getThrownProxy 方法创建 ThrowableProxy 实例,进而在 ThrowableProxy 构造函数内部触发解析、加载异常堆栈类

问题小结

 Log4j2 打印异常日志时AsyncLoggerConfig 会初始化 Disruptor RingBuffer 日志元素字段,并进一步触发解析、加载异常堆栈类JVM 通过生成字节码的方式优化反射调用性能,但该动态生成的类无法被 WebAppClassLoader 类加载器加载,因此当大量包含反射调用的异常堆栈被输出到日志时会频繁地触发类加载,由于类加载过程是 synchronized 同步加锁的,且每次加载都需要读取文件,速度较慢,从而导致线程 Block。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容