点击上方“码农突围”,马上关注
这里是码农充电第一站,回复“666”,获取一份专属大礼包
真爱,请设置“星标”或点个“在看”
来源:juejin.im/post/6844903926777511943
写在前面
服务器硬件
测试工具
logback日志框架同步和异步测试
推荐使用log4j2而不是logback
结论
写在前面
前段时间写了一篇文章(文章链接:Logback配置文件这么写,TPS提高10倍),反响还不错,有很多网友也发表了自己的意见:
![](https://i-blog.csdnimg.cn/blog_migrate/dda35050512ac0dac01ad5202892449e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e37491748a7d1af0ca37bac6e8d7cf1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/38e583927360678d136b314390fc0fd4.png)
总结一下就是:
logback性能测试同步和异步TPS相差不大
都9102年了还在用logback
看到网友的意见后又继续去做了一波测试和调研
服务器硬件
CPU 六核
内存 8G
测试工具
JMeter
JProfile
APM(New Relic)
logback日志框架同步和异步测试
之前的测试结果存在以下几点问题:
测试样本数过少(即线程数和循环执行次数过少,之前线程数为100,循环1次,样本总数为100)
测试次数过少,只进行了一次测试,结果存在偶然性
两次测试结果存在污染,样本数量不一样
针对以上问题,重新测试中将线程数修改为200,每次测试中循环100次,样本总数为2w,和原来测试的样本数相比扩大200倍,并且重复测试5次。新的测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/fbdd53a2967983c6d9b3ca1f319e151d.png)
新的测试结果表明,使用logback日志框架同步和异步输出日志方式的TPS相差不大。把数据制作成柱形图更直观
![](https://i-blog.csdnimg.cn/blog_migrate/8520e5c30ec8b8592bc4a19c25960efc.png)
但是总觉得异步去写日志了,访问api的线程将更快响应客户端,TPS就应该有明显的变化才对。想不通又去网上查阅了一些资料,有反应说通过APM
进行性能监控,同步和异步的TPS将会有较大的差别,TPS一定是会有明显变化的(呐喊),于是用APM去监控JMeter发送的请求(JMeter
参数设置为线程数100,Ramp-up Period为0,循环100次):APM测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/498d25d3a950676d4aaa823338845562.png)
APM监控下,在执行的五分钟内异步输出日志TPS平均为378rpm
![](https://i-blog.csdnimg.cn/blog_migrate/d1ce3f67b41f6302e717d7639d6abff6.png)
APM监控下,在执行的五分钟内同步输出日志TPS平均为333rpm 发现TPS同步和异步相比还是不明显
又一次证明失败 虽然想不明白但后来和网友探讨了下,醍醐灌顶
![](https://i-blog.csdnimg.cn/blog_migrate/ad2608ff3e6f124b6a1ecc5ace15f23a.png)
TPS变化不明显的原因如下:TPS为每秒处理事务数,每个事务包括了如下3个过程:
用户请求服务器
服务器自己的内部处理
服务器返回给用户
服务器自己的内部请求包括访问数据库、处理逻辑和打印日志,同步和异步中唯一不同的就是打印日志的方式。而从测试结果来看,打印日志耗时只占API访问请求的5.3%,所以缩短打印日志耗时不能很明显的提高TPS,因为打印时间和网络请求、业务处理消耗时间可以忽略不计 但是测试结果表明,虽然使用异步输出方式不能明显提高TPS,但是能够减少打印日志的耗时。所以使用logback日志框架还是推荐使用异步输出方式
推荐使用log4j2而不是logback
log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,带来了一些重大的提升,在异步方面的性能得到了巨大提升,其除了提供Async Append异步实现外还提供了Async Log异步实现,其中Async Append异步实现方式和logback的异步实现差不多,而Async Log基于LMAX Disruptor库,实现了一个高性能的异步记录器。本次测试中log4j2异步实现是基于Async Log。JMeter测试参数和之前的logback测试一样,线程数200,循环次数100,重复五轮。并且logj2日志配置文件基本和logback异步配置相同,满足:
控制台打印日志
分类输出日志
按天滚动
同样的日志输出格式
测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/3a7ea1aa97c1e578573b85b1d4d390ce.png)
将TPS制作为柱形图
![](https://i-blog.csdnimg.cn/blog_migrate/0fc5f9d355173be985220a4c50640ed7.png)
TPS提升了6倍!!! ,并且打印日志的耗时都快到统计不出来了 官方提供的测试报告中,log4j2和logback相比性能提升更明显。附官方测试报告:Asynchronous Loggers for Low-Latency Logging
结论
如果使用logback框架,推荐使用异步输出日志方式
选择日志框架,推荐使用log4j2
最后附:测试代码
写在前面
服务器硬件
测试工具
logback日志框架同步和异步测试
推荐使用log4j2而不是logback
结论
写在前面
前段时间写了一篇文章(文章链接:Logback配置文件这么写,TPS提高10倍),反响还不错,有很多网友也发表了自己的意见:
![](https://i-blog.csdnimg.cn/blog_migrate/dda35050512ac0dac01ad5202892449e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e37491748a7d1af0ca37bac6e8d7cf1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/38e583927360678d136b314390fc0fd4.png)
总结一下就是:
logback性能测试同步和异步TPS相差不大
都9102年了还在用logback
看到网友的意见后又继续去做了一波测试和调研
服务器硬件
CPU 六核
内存 8G
测试工具
JMeter
JProfile
APM(New Relic)
logback日志框架同步和异步测试
之前的测试结果存在以下几点问题:
测试样本数过少(即线程数和循环执行次数过少,之前线程数为100,循环1次,样本总数为100)
测试次数过少,只进行了一次测试,结果存在偶然性
两次测试结果存在污染,样本数量不一样
针对以上问题,重新测试中将线程数修改为200,每次测试中循环100次,样本总数为2w,和原来测试的样本数相比扩大200倍,并且重复测试5次。新的测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/fbdd53a2967983c6d9b3ca1f319e151d.png)
新的测试结果表明,使用logback日志框架同步和异步输出日志方式的TPS相差不大。把数据制作成柱形图更直观
![](https://i-blog.csdnimg.cn/blog_migrate/8520e5c30ec8b8592bc4a19c25960efc.png)
但是总觉得异步去写日志了,访问api的线程将更快响应客户端,TPS就应该有明显的变化才对。想不通又去网上查阅了一些资料,有反应说通过APM
进行性能监控,同步和异步的TPS将会有较大的差别,TPS一定是会有明显变化的(呐喊),于是用APM去监控JMeter发送的请求(JMeter
参数设置为线程数100,Ramp-up Period为0,循环100次):APM测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/498d25d3a950676d4aaa823338845562.png)
APM监控下,在执行的五分钟内异步输出日志TPS平均为378rpm
![](https://i-blog.csdnimg.cn/blog_migrate/d1ce3f67b41f6302e717d7639d6abff6.png)
APM监控下,在执行的五分钟内同步输出日志TPS平均为333rpm 发现TPS同步和异步相比还是不明显
又一次证明失败 虽然想不明白但后来和网友探讨了下,醍醐灌顶
![](https://i-blog.csdnimg.cn/blog_migrate/ad2608ff3e6f124b6a1ecc5ace15f23a.png)
TPS变化不明显的原因如下:TPS为每秒处理事务数,每个事务包括了如下3个过程:
用户请求服务器
服务器自己的内部处理
服务器返回给用户
服务器自己的内部请求包括访问数据库、处理逻辑和打印日志,同步和异步中唯一不同的就是打印日志的方式。而从测试结果来看,打印日志耗时只占API访问请求的5.3%,所以缩短打印日志耗时不能很明显的提高TPS,因为打印时间和网络请求、业务处理消耗时间可以忽略不计 但是测试结果表明,虽然使用异步输出方式不能明显提高TPS,但是能够减少打印日志的耗时。所以使用logback日志框架还是推荐使用异步输出方式
推荐使用log4j2而不是logback
log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,带来了一些重大的提升,在异步方面的性能得到了巨大提升,其除了提供Async Append异步实现外还提供了Async Log异步实现,其中Async Append异步实现方式和logback的异步实现差不多,而Async Log基于LMAX Disruptor库,实现了一个高性能的异步记录器。本次测试中log4j2异步实现是基于Async Log。JMeter测试参数和之前的logback测试一样,线程数200,循环次数100,重复五轮。并且logj2日志配置文件基本和logback异步配置相同,满足:
控制台打印日志
分类输出日志
按天滚动
同样的日志输出格式
测试结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/3a7ea1aa97c1e578573b85b1d4d390ce.png)
将TPS制作为柱形图
![](https://i-blog.csdnimg.cn/blog_migrate/0fc5f9d355173be985220a4c50640ed7.png)
TPS提升了6倍!!! ,并且打印日志的耗时都快到统计不出来了 官方提供的测试报告中,log4j2和logback相比性能提升更明显。附官方测试报告:Asynchronous Loggers for Low-Latency Logging
结论
如果使用logback框架,推荐使用异步输出日志方式
选择日志框架,推荐使用log4j2
最近有有不少老铁在后台留言说,想进大厂,但是算法不好。最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂。现在开放分享给大家。希望对大家有所帮助。
任何的算法题,如同写作文一样,都有一些模板可以套用的。比如面试常考的DP(动态规划),难的是一些关键点是否能想清楚。比如你能写出动态转移方程,这题基本上就可以AC了。
整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。
刷题任务的题目,是根据题目的类型来汇总的,总结了八个类别,每个类别下面也总结了5个左右的题型,帮助大家分门别类的突破,所以刷起来相对会更有重点和针对性。如果从头到尾的刷,每周按顺序刷42题,很容易让自己坚持不下来,也会觉得很枯燥。所以在制定计划的时候可以让这个计划变得更“有趣"和针对性,让它看起来更容易实现一点,才会更容易坚持。
目前上述内容已打包成完整电子书,具体获取方式如下:
扫描关注 程序猿进阶 公众号;
在 程序猿进阶 公众号后台回复关键词「9999」获取下载地址。
扫描关注,回复"9999"即可下载
最近热文• Eclipse 官宣,干掉 VS Code !• 世界上五个最不务正业的科学家!看完三观都碎了…• 字节CEO张一鸣卧底公司群2天,怒斥员工摸鱼• 11月全国程序员平均工资出炉,网友:我丢了同行的脸在这里,我为大家准备了一份2020年最新最全的《Java面试题及答案V3.0》,这套电子书涵盖了诸多后端技术栈的面试题和答案,相信可以帮助大家在最短的时间内复习Java后端的大多数面试题,从而拿到自己心仪的offer。截了张图,大家可以仔细查看左边的菜单栏,覆盖的知识面真的很广,而且质量都很不错。
资料获取方法
扫描下方二维码后台回复关键词:Java核心整理明天见(。・ω・。)