锁定老帖子 主题:log4j 数据写入性能测试(同步、异步)
该帖已经被评为良好帖
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-02
某个项目需要,做了下简单的log4j的测试。 log4j写入数据文件一般有如下几个方式 1、直接写文件方式,ImmediateFlush=true,每条log直接写入磁盘 2、同步缓存方式,bufferedIO=true,使用一个char[],做缓存,默认8k,每次写满这个缓存,然后flush到磁盘。 3、异步缓存方式,appender换成AsyncAppender即可,默认的缓存是128条记录,使用一个ArrayList来模拟的BlockingQueue,可以设置队列满了是等待还是直接丢弃该数据。额外的启动一个check的线程,从list中获取数据并写入文件。
log4j 数据写入性能测试1. 测试环境:
Java单线程写文件测试,每次flush 5K数据,硬盘写入速度约65M/s。 2. 测试场景1(bufferedIO)2.1、 log4j配置
2.2、 测试数据
性能比较稳定,log每条记录比较小时,性能不佳,记录为3K时,比较接近直接写硬盘的速度了。
3. 测试场景2(Async)3.1 log4j配置
3.2 测试数据
异步写log(1K和3K)性能不太稳定,可能某些时候突然下降20%的写入速度。
4. 总结根据上面的测试场景和测试数据,基本可以得出如下结论: 1. 每次记录数据太小,性能不佳。3K大小的数据性能比较好。 2. 多线程对整体的性能影响不大,2-4线程比较合适。 3. 异步写入对直接写本地文件的场景没有性能提高。 4. 直接本地数据写入方式、每条记录数据在1K以上时,异步方式可能有性能波动。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-03
这个还真没测试过 感谢lz分享。。。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-04
楼主这个测试仅仅在测试IO性能而已,无论异步和同步对于IO性能其实不会有什么影响,因为那直接取决于磁盘以及Java的API性能。另一方面,这样的测试无论测多少遍异步Appender基本上都是必输无疑的,因为异步Appender存在线程上下文切换过程而直接Appender不存在这个消耗。
其实,异步的最大好处不是写日志更快,而是“响应”的更快,也就是从开始调用log.xxx("")到这个函数调用结束的速度变快。原因我想你应该很清楚。 楼主可以试试另一个场景 startTime; for(i in 1..1000000) log("xxx"+i); println current-startTime; 看看谁跑得快。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-04
云中苍月 写道 楼主这个测试仅仅在测试IO性能而已,无论异步和同步对于IO性能其实不会有什么影响,因为那直接取决于磁盘以及Java的API性能。另一方面,这样的测试无论测多少遍异步Appender基本上都是必输无疑的,因为异步Appender存在线程上下文切换过程而直接Appender不存在这个消耗。 其实,异步的最大好处不是写日志更快,而是“响应”的更快,也就是从开始调用log.xxx("")到这个函数调用结束的速度变快。原因我想你应该很清楚。 楼主可以试试另一个场景 startTime; for(i in 1..1000000) log("xxx"+i); println current-startTime; 看看谁跑得快。 不都一样,lz的场景也测了这个。 测试的每条数据量一样的,单位时间内写的多的那个,不就跑的快。 and 你给的这个例子 每条数据量太小。 估计: 1、都不快 2、差不多 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-06
楼主在教大家怎么用log4j以降低对应用的性能影响。 有些人总是从表面看事情。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-02-10
最后修改:2011-02-10
引用 异步写入对直接写本地文件的场景没有性能提高。
这个是什么原因,直觉上应该异步的要好一些。。。。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-04-19
cjnetwork 写道 引用 异步写入对直接写本地文件的场景没有性能提高。
这个是什么原因,直觉上应该异步的要好一些。。。。 异步对于socket或jdbc这种比较耗时的数据落地方式,性能要好一些。 因为它的异步缓冲使得前后解耦,曲线更平滑。 对于本地文件落地,本来就很快,异步无疑是响应更慢。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
浏览 13776 次