log4j【5】( log4j日志异步化大幅提升系统性能 )
2016-02-03 22:32
267 查看
经过大型J2EE项目实测,Log4j的日志输出对系统性能有比较显著的影响,尤其是日志输入量比较大时,例如:系统并发量很大,显示Hibernate的sql和参数日志,或日志级别较低DEBUG或INFO时等。
使用Async Logger控制日志输出可以显著改善系统性能。
1) 测试用例:同步文件日志输出
测试功能:模块管理功能,
输出Hibernate SQL和参数,输出到文件,配置如下:
运用JMeter进行压力测试,线程数50,运行4次,计算请求平均响应值(Rame-up Period: 1, 循环次数:1)
测试结果:AVG: 12565ms
2) 测试用例:异步文件日志输出
Log4j.xml 配置修改如下:
在BufferSize为 32, 64,128,256,512,2048时测试的请求平均耗时,及较测试用例1中的性能提高率对比如下所示:
从结果可以看出,性能提高率最高 47%。最低32%。缓冲为256时性能改善最佳, 提高47%
结论:使用Log4j的J2EE应用,日志的优化对系统性能有显著影响:
1)尽量减少不必要的日志输出,尤其要避免 root logger上过低级别的输出,避免在生产环境上向控制台输出日志。例如,下面的配置是很影响性能的,:
<root>
<priority value="DEBUG" />
<appender-ref ref="CONSOLE" >
</root>
2) 使用Async logger输出日志,buffersize在相应日志频率下,越大越好,对于大型项目,可以选2048以上值。
使用Async Logger控制日志输出可以显著改善系统性能。
1) 测试用例:同步文件日志输出
测试功能:模块管理功能,
输出Hibernate SQL和参数,输出到文件,配置如下:
<appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="log/Hibernate_SQL.log" /> <param name="Append" value="true" /> <param name="DatePattern" value="'.'yyyy-MM-dd-HH" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" /> </layout> </appender> <category name="org.hibernate.SQL"> <priority value="TRACE" /> <appender-ref ref="Hibernate_SQL" /> </category> <category name="org.hibernate.type"> <priority value="TRACE" /> <appender-ref ref="Hibernate_SQL" /> </category>
运用JMeter进行压力测试,线程数50,运行4次,计算请求平均响应值(Rame-up Period: 1, 循环次数:1)
测试结果:AVG: 12565ms
2) 测试用例:异步文件日志输出
Log4j.xml 配置修改如下:
<appender name="ASYNC_Hibernate_SQL" class="org.apache.log4j.AsyncAppender"> <param name="BufferSize" value="512"/> <appender-ref ref="Hibernate_SQL"/> </appender> <category name="org.hibernate.SQL"> <priority value="TRACE" /> <appender-ref ref="ASYNC_Hibernate_SQL" /> </category> <category name="org.hibernate.type"> <priority value="TRACE" /> <appender-ref ref="ASYNC_Hibernate_SQL" /> </category>
在BufferSize为 32, 64,128,256,512,2048时测试的请求平均耗时,及较测试用例1中的性能提高率对比如下所示:
同步,异步日志性能对比分析 | (每次50并发,运行4次) | |
sync 日志输出 | 原时间消耗 | |
12565 | ||
async 日志输出 | ||
缓冲区大小 | 平均耗时 | 性能提高率 |
32 | 6744 | 46.33% |
64 | 8487 | 32.46% |
128 | 6899 | 45.09% |
256 | 6606 | 47.43% |
512 | 7306 | 41.85% |
2048 | 3406 | 72.89% |
结论:使用Log4j的J2EE应用,日志的优化对系统性能有显著影响:
1)尽量减少不必要的日志输出,尤其要避免 root logger上过低级别的输出,避免在生产环境上向控制台输出日志。例如,下面的配置是很影响性能的,:
<root>
<priority value="DEBUG" />
<appender-ref ref="CONSOLE" >
</root>
2) 使用Async logger输出日志,buffersize在相应日志频率下,越大越好,对于大型项目,可以选2048以上值。
相关文章推荐
- hdu 4489 The King’s Ups and Downs (组合数学 + dp )
- 乐美客HiKey 96Board
- 网页的分页下标生成代码(PHP后端方法)
- 读书笔记--多媒体
- yraniBddA.67
- log4j【4】(log4j的性能问题)
- 前端开发遇到的一些小问题
- Loadrunner日志设置与查看
- HDU1242 rescue 【BFS+优先队列】
- iOS开发PCH文件、NSLog真机不打印
- 【组合数学】[HNOI2008][HYSBZ/BZOJ1008]越狱
- hdu3081 Marriage Match II
- linux实战案例-2
- 闭包的返回值和参数
- Binary tree related algorithms summary
- SPDY与HTTP2.0
- JAVA WEB学习路线
- 基于CentOS 6的主从DNS服务器搭建
- 《笨办法学Python》 第32课手记
- Androidx学习笔记(49)--- Activity的跳转