多线程环境下的性能杀手:日志记录

今天晚上做了一个性能测试,发现在同等条件下,使用日志的处理速度比关闭所有日志慢了接近10被。
我的应用是一个基于Mian的多线程服务器程序,在打开日志时进行压力测试,发现Profiler的Thread图表基本上是万里河山一片红:
根据图例,红色代表线程正在等待某个监视器。但是我的事务代码基本上没有什么使用同步的东西啊……数据库连接也用ThreadLocal了,不应该出现这种情况啊。
经过检查,发现拖慢处理速度的就是平时经常使用的日志。因为Logger的方法都是同步的(或者从根本上说,System.out和System.err就是一个同步的输出流)所以造成线程在处理时不得不停下来等待其他线程完成日志输出。就算不用Logger,用System.out.println()也是一样的道理。
编辑日志属性,关闭所有日志以后,性能有了极大的提高,每秒能处理的请求数量提升了13倍左右。

>_<|| 我手贱!!这个有问题!绝对有问题!!一般般啦,真的很一般般。还不错哦~小表扬一下!GJ!乃就是新世界的神様了,快去拯救世界吧! (No Ratings Yet)
Loading...

Comments are closed.

春菜 对话 相声
双击调戏
双击调戏