通过log4j日志异步化大幅提升系统性能
2008-04-06 10:53
477 查看
经过大型J2EE项目实测,Log4j的日志输出对系统性能有比较显著的影响,尤其是日志输入量比较大时,例如:系统并发量很大,显示Hibernate的sql和参数日志,或日志级别较低DEBUG或INFO时等。
使用Async Logger控制日志输出可以显著改善系统性能。
1) 测试用例:同步文件日志输出
测试功能:模块管理功能,
输出Hibernate SQL和参数,输出到文件,配置如下:
[align=left] <appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender">[/align]
[align=left] <param name="File" value="log/Hibernate_SQL.log" />[/align]
[align=left] <param name="Append" value="true" />[/align]
[align=left] <param name="DatePattern" value="'.'yyyy-MM-dd-HH" />[/align]
[align=left] <layout class="org.apache.log4j.PatternLayout">[/align]
[align=left] <param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" />[/align]
[align=left] </layout>[/align]
[align=left] </appender>[/align]
[align=left] [/align]
[align=left] <category name="org.hibernate.SQL">[/align]
[align=left] <priority value="TRACE" /> [/align]
[align=left] <appender-ref ref="Hibernate_SQL" />[/align]
[align=left] </category>[/align]
[align=left] <category name="org.hibernate.type">[/align]
[align=left] <priority value="TRACE" /> [/align]
[align=left] <appender-ref ref="Hibernate_SQL" />[/align]
[align=left] </category>[/align]
运用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中的性能提高率对比如下所示:
从结果可以看出,性能提高率最高 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和参数,输出到文件,配置如下:
[align=left] <appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender">[/align]
[align=left] <param name="File" value="log/Hibernate_SQL.log" />[/align]
[align=left] <param name="Append" value="true" />[/align]
[align=left] <param name="DatePattern" value="'.'yyyy-MM-dd-HH" />[/align]
[align=left] <layout class="org.apache.log4j.PatternLayout">[/align]
[align=left] <param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" />[/align]
[align=left] </layout>[/align]
[align=left] </appender>[/align]
[align=left] [/align]
[align=left] <category name="org.hibernate.SQL">[/align]
[align=left] <priority value="TRACE" /> [/align]
[align=left] <appender-ref ref="Hibernate_SQL" />[/align]
[align=left] </category>[/align]
[align=left] <category name="org.hibernate.type">[/align]
[align=left] <priority value="TRACE" /> [/align]
[align=left] <appender-ref ref="Hibernate_SQL" />[/align]
[align=left] </category>[/align]
运用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次) | |
[align=right]sync 日志输出[/align] | [align=right]原时间消耗[/align] | |
| [align=right]12565[/align] | |
[align=right]async 日志输出[/align] | | |
[align=right]缓冲区大小[/align] | [align=right]平均耗时[/align] | [align=right]性能提高率[/align] |
[align=right]32[/align] | [align=right]6744[/align] | [align=right]46.33%[/align] |
[align=right]64[/align] | [align=right]8487[/align] | [align=right]32.46%[/align] |
[align=right]128[/align] | [align=right]6899[/align] | [align=right]45.09%[/align] |
[align=right]256[/align] | [align=right]6606[/align] | [align=right]47.43%[/align] |
[align=right]512[/align] | [align=right]7306[/align] | [align=right]41.85%[/align] |
[align=right]2048[/align] | [align=right]3406[/align] | [align=right]72.89%[/align] |
从结果可以看出,性能提高率最高 47%。最低32%。缓冲为256时性能改善最佳, 提高47%
结论:使用Log4j的J2EE应用,日志的优化对系统性能有显著影响:
1)尽量减少不必要的日志输出,尤其要避免 root logger上过低级别的输出,避免在生产环境上向控制台输出日志。例如,下面的配置是很影响性能的,:
<root>
<priority value="DEBUG" />
<appender-ref ref="CONSOLE" >
</root>
2) 使用Async logger输出日志,buffersize在相应日志频率下,越大越好,对于大型项目,可以选2048以上值。
相关文章推荐
- log4j日志异步化大幅提升系统性能
- log4j日志异步化大幅提升系统性能
- log4j【5】( log4j日志异步化大幅提升系统性能 )
- log4j日志异步化大幅提升系统性能
- log4j日志异步化大幅提升系统性能
- log4j日志异步化大幅提升系统性能
- log4j日志异步化大幅提升系统
- 仿酷狗音乐播放器开发日志二十二 动态调色板控件第二版(性能大幅提升附源码)
- 性能优化案例(一):通过修改路由算法提升系统性能
- 用java端,通过log4j 把日志写入scribe 日志系统
- 仿酷狗音乐播放器开发日志二十二 动态调色板控件第二版(性能大幅提升附源码)
- 将虚拟内存使用的页面文件设置到非系统分区可以提升系统性能
- 171206 8周3次课 rsync通过服务同步、linux系统日志、screen工具
- 通过分区(Partition)提升MySQL性能
- Log4j日志管理系统简单使用说明
- Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
- 日志文件系统及性能分析
- paip.提升效率--调试--日志系统日志参数含义---python
- 通过PLD指令提升软件性能
- [转]应用OSCache提升J2EE系统运行性能