当前位置: 首页 > news >正文

AsyncAppende异步 + 有界队列 + 线程池实现高性能日志系统

背景与需求分析

同步日志写入方式存在主线程阻塞风险,可能引发系统吞吐量下降和响应延迟。历史问题包括服务重启失败、接口超时等。优化目标是将日志系统迁移至NFS存储,结合异步机制提升性能。

核心设计与实现

日志路径迁移

  • 统一存储至NFS,标准化路径命名和保留策略
  • 采用Logback配置替代原有Onboard日志规则

Logback AsyncAppender机制

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="STDOUT" /><queueSize>1024</queueSize><discardingThreshold>0</discardingThreshold><neverBlock>true</neverBlock> 
</appender>
  • 适用于业务日志和框架日志
  • 通过阻塞队列实现生产-消费解耦
  • 关键参数:队列容量1024、零丢弃阈值、非阻塞模式

高性能日志处理方案

private final BlockingQueue<String> logQueue = new LinkedBlockingQueue<>(10000);
  • 有界队列容量10,000防止OOM
  • 使用offer()方法实现非阻塞写入
  • 批量处理策略:
    • 时间触发:1秒间隔强制提交
    • 数量触发:达到100条立即提交
List<String> batch = new ArrayList<>(BATCH_SIZE);
String firstLog = logQueue.poll(BATCH_INTERVAL, TimeUnit.MILLISECONDS);
if (firstLog != null) {batch.add(firstLog);logQueue.drainTo(batch, BATCH_SIZE - 1);logExecutor.submit(() -> batch.forEach(log::info));
}

线程池配置

ThreadPoolExecutor logExecutor = new ThreadPoolExecutor(2, 12, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(200),new ThreadFactoryBuilder().setNameFormat("perf-log-%d").build(),new ThreadPoolExecutor.CallerRunsPolicy()
);
  • 核心线程2个,最大12个
  • 60秒空闲回收
  • 任务队列容量200
  • 命名格式"perf-log-%d"
  • 拒绝策略CallerRunsPolicy

容错机制

  • 队列满时自动丢弃日志并告警
  • 异常捕获隔离,防止影响主流程
  • 守护线程设置避免JVM退出阻塞

优化效果

指标同步写入异步批量写入提升幅度
吞吐量(TPS)1,0008,000700%↑
写入延迟(ms)10~20<195%↓
阻塞影响可能阻塞业务无影响100%↑

潜在问题与建议

  • 固定队列容量可能导致突发流量处理不足
  • 建议实现动态队列扩容机制
  • 可考虑分级存储策略应对日志洪峰

该方案通过异步化架构设计,有效平衡了性能与可靠性需求,实测显示关键指标显著提升。后续可结合具体业务场景进一步优化队列管理策略。

http://www.dtcms.com/a/317597.html

相关文章:

  • 【Axure高保真原型】批量添加和删除图片
  • 目录遍历漏洞学习
  • 概率/期望 DP Jon and Orbs
  • 低代码系统的技术深度:超越“可视化操作”的架构与实现挑战
  • 基于51单片机的温控风扇Protues仿真设计
  • 【FAQ】Script导出SharePoint 目录文件列表并统计大小
  • SQL167 SQL类别高难度试卷得分的截断平均值
  • Tdesign-React 请求接口 415 问题借助 chatmaster 模型处理记录
  • Solidity 编程进阶
  • docker容器临时文件去除,服务器容量空间
  • leetcode643:子数组最大平均数 I(滑动窗口入门之定长滑动窗口)
  • 上下文工程
  • .Net下载共享文件夹中的文件
  • excel名称管理器显示隐藏
  • Java高频方法总结
  • 排序算法归并排序
  • HarmonyOS应用开发环境搭建以及快速入门介绍
  • OpenAI隆重推出开源大模型:GPT-OSS
  • 面试题:基础的sql命令
  • Java NIO
  • 从 LinkedIn 到 Apache:Kafka 的架构设计与应用场景
  • 【25-cv-08899/08985】Lisa Audit 23张版权画作暴雷,Keith律所双案并发冻结跨境店铺!
  • Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置
  • Python 自动化与 Web 应用开发详细教案
  • 前端全栈修炼手册:从 Vue3 到工程化的进阶之路
  • Ethereum: 深入Hardhat Console, 我们的智能合约瑞士军刀
  • 微型导轨:智能家居抽屉的智能化应用
  • Text2SQL 智能问答系统开发-spider验证集(三)
  • 线程互斥与同步
  • C语言控制语句练习题1