高并发系统怎么选日志框架?(高并发系统设计全彩版手册)
ccwgpt 2024-10-01 08:13 19 浏览 0 评论
经常遇到小伙伴在完成接口开发后通过Jmeter进行性能压测,压测发现TPS上不去,少则几十多则一两百,这在高并发系统中远远不够的。很大一部分原因是使用了不合适的log日志组件,一般开发人员很难想到到这点。下面就带你选择合适的日志组件让你的接口性能提升几倍甚至几十倍。
首先看看我们日常使用的日志组件。
log4j、logback、log4j2日志对比:
1.log4j: 这是Java中最早的日志框架之一,提供了可靠、快速且灵活的日志记录功能。它广泛用于许多不同的Java应用程序中。
2.logback: logback是log4j的一个改进版,由相同的原创者设计。它被设计为更加灵活且具有更好性能,特别是在日志轮换和条件日志处理方面。logback直接实现了SLF4J API,这意味着你可以很容易地将log4j或其他日志系统替换为logback。logback的默认配置要比log4j快几倍,而且logback的配置文件可以在出错时不需要完全解析,可以提高应用程序的健壮性。
3.log4j2: 这是log4j的升级版,完全重写了代码以提供更高的性能和更多的功能。它支持异步日志记录和更复杂的配置,同时也保持向后兼容性。log4j2 也使用了SLF4J API,提供了更多的灵活性和更好的资源管理。
log4j和logback是同步框架,如果选择这个两个组件作为项目的日志组件,通过jmeter进行高并发压测时可以通过jvm的jstack命令观察应用程序的线程栈,会发现有大量的IO写日志线程阻塞,例子如下:
日志的IO线程阻塞,这就导致很多的请求不能及时处理,极大降低了接口的TPS,这也就是压测时导致TPS上不去的根本原因。
怎样解决日志IO阻塞问题,同步改异步使用log4j2,log4j2的异步日志是通过队列来处理,log4j2支持以下四队列
1.DisruptorBlockingQueue 基于disruptor实现的高性能队列。
2.JCToolsBlockingQueue基于JCTools 实现的无锁队列。
3.LinkedTransferQueue是Java原生的LinkedTransferQueue 实现。
4.ArrayBlockingQueue是Java 原生的 ArrayBlockingQueue 实现。
在项目实践,disruptor队列性能是远超另外三种队列,disruptor是高性能环形队列,每秒能处理500-600万订单。这里着重介绍log4j2+disruptor的使用方案。
springboot集成log4j2+disruptor解决方案
1.引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
</dependency>
2.排除logback
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除掉logging,不使用logback-->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<!-- 排除掉logging,不使用logback -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
有其他组件使用了logback也要一并排除
3.开启全局异步
@SpringBootApplication
public class BootLaunchApplication {
public static void main(String[] args) {
//下面语句使得Log4j2日志输出使用异步处理
System.setProperty("Log4jContextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
SpringApplication.run(BootLaunchApplication.class, args);
}
}
如果不使用全局异步,可以开启局部异步,需要在log4j2.xml中配置
<Loggers>
<AsyncRoot level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="applicationAppender"/>
</AsyncRoot>
<AsyncLogger name="org.apache" level="INFO" additivity="false">
<AppenderRef ref="apacheAppender"/>
</AsyncLogger>
</Loggers>
4.配置log4j2.xml其他参数
做完以上操作后,在进行压测会发现TPS增加几倍甚至几十倍。
相关推荐
- React 开发翻车现场!这 6 个救命技巧,90% 工程师居然现在才知道
-
前端圈最近都在卷React18新特性,可咱开发时踩的坑却一个比一个离谱!组件卡死、状态乱套、路由错乱...别担心!今天分享6个超实用的React实战技巧,让你轻松拿捏开发难题,代码直接...
- Web前端:React JS越来越受欢迎,它的主要优点为什么要使用它?
-
ReactJS是一个开源JavaScript库,用于为单页应用程序构建用户界面,它还为不同的移动应用程序提供视图层,并创建可重用的UI组件。 我们可以在Web应用程序的数据中创建特定的更改,而...
- 性能焦虑!前端人必看!5 个 React 组件优化神技! 颠覆你的认知!
-
在前端开发的赛道上,性能优化就像一场永不停歇的马拉松。作为前端工程师,你是否常常为React组件的性能问题头疼不已?页面加载缓慢、组件频繁重渲染,这些痛点分分钟让开发进度受阻。别担心!今天就来分享...
- React 实战必学!99% 工程师踩过的 5 大坑,3 招教你轻松破解
-
前端开发的小伙伴们,咱就是说,React现在可是前端界的“顶流明星”,热度一直居高不下!但用它开发项目的时候,是不是总有那么些瞬间,让你怀疑人生,对着屏幕疯狂抓头发?别慌!今天就给大家分享几个超实...
- 惬意!午间一道 React 题,轻松拿捏前端面试小技巧
-
忙碌了一上午,眼睛酸涩、脑子发懵?别急着刷短视频“放空”,不如花几分钟和我一起“品尝”一道React面试题小甜点!就像在阳光洒满窗台的午后,泡一杯热茶,惬意又能悄悄涨知识,何乐而不为?最近,...
- 一起深入盘点 2025 年 React 发展的 10个趋势?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.React服务器组件React服务...
- 前端掉坑血泪史!4 个 React 性能优化绝招让页面秒开
-
在前端圈子里摸爬滚打这么多年,我发现React开发时踩坑的经历大家都大同小异。页面加载慢、组件频繁重渲染、状态管理混乱……这些痛点,相信不少前端工程师都感同身受。别愁!今天就给大家分享4个超...
- 前端人崩溃瞬间!5 招 React 实战技巧让项目起死回生
-
有没有在写React项目时,遇到页面卡顿到怀疑人生、数据更新不及时、代码逻辑混乱到无从下手的情况?别慌!作为摸爬滚打多年的前端老炮,今天就把5个救命级的React实战技巧倾囊相授,帮你轻松...
- 8.3K star!React Bits,让你拥有全网几乎所有动画效果
-
前端开源项目101专栏:一个能让你更快接触到高质量开源项目的地方。我会探索分享精选101个高质量的开源项目。这是系列的第7篇文章,分享一套拥有计划全网所有动画效果,且创意最丰富的动画React组...
- 开始学习React - 概览和演示教程
-
#头条创作挑战赛#本文同步本人掘金平台的原创翻译:https://juejin.cn/post/6844903823085944846当我刚开始学习JavaScript的时候,我就听说了React,但...
- 阿里AI工具Web Dev上线!一句话生成React网页
-
5月11日,阿里巴巴推出全新AI工具“WebDev”,支持用户通过一句话指令生成网页应用。该工具集成HTML、CSS、JavaScript三大前端核心技术,并统一采用React框架实现,可在数秒内创...
- JS流行框架/库排名Top100,看看你熟知的Js排第几
-
权威的JavaScript趋势榜stats.js.org每15分钟根据github上的stars和forks总数实时汇总出JavaScript开源项目的流行度排名,一起来看看你所熟知的项目排名第几...
- 新手如何搭建个人网站
-
ElementUl是饿了么前端团队推出的桌面端UI框架,具有是简洁、直观、强悍和低学习成本等优势,非常适合初学者使用。因此,本次项目使用ElementUI框架来完成个人博客的主体开发,欢迎大家讨论...
- 站在巨人肩膀上的 .NET 通用权限开发框架:Admin.NET
-
站在巨人肩膀上的.NET通用权限开发框架Admin.NET是一个面向.NET程序员的低代码平台,java平台类似的框架有ruoyi,芋道,JeelowCode等。这类框架普遍采用前后端分离的开发技...
- Python+selenium自动化之判定元素是否存在
-
在测试过程中,我碰到过这类的问题,使用find_element却找不到某个元素而产生异常,这就需要在操作某个元素之前判定该元素是否存在,而selenium中没有判定元素是否存在的方法,或者判定相同的元...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- React 开发翻车现场!这 6 个救命技巧,90% 工程师居然现在才知道
- Web前端:React JS越来越受欢迎,它的主要优点为什么要使用它?
- 性能焦虑!前端人必看!5 个 React 组件优化神技! 颠覆你的认知!
- React 实战必学!99% 工程师踩过的 5 大坑,3 招教你轻松破解
- 惬意!午间一道 React 题,轻松拿捏前端面试小技巧
- 一起深入盘点 2025 年 React 发展的 10个趋势?
- 前端掉坑血泪史!4 个 React 性能优化绝招让页面秒开
- 前端人崩溃瞬间!5 招 React 实战技巧让项目起死回生
- 8.3K star!React Bits,让你拥有全网几乎所有动画效果
- 开始学习React - 概览和演示教程
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)