把Log4j 用于大型的互联网站(几十万人同时在线的种),会不会有性能问提。一般这种网站是怎么记录日志的(Java方面)?
现在架构一个能支持几十万人在线的网站,基于JavaEE体系。
想用Lo4j来记录WebServer的日志。
看到有文章可以对Log4j进行调优的措施。
但毕竟没有做过,不知道Log4j会不会有瓶颈。
有没有做的类似系统的给点建议。
还有对于高并发网站,大家一般是如何记录日志的。
比如用RSysLog?
回归的麒麟
11 years, 8 months ago
Answers
log4j这个框架在写入日志的时候是同步的,也就是说串行的。越是高并发的应用,同步写入日志所带来的影响就越大。实际测试过一个项目,X电力公司的项目,做压力测试的时候,压力越大,TPS(每秒处理业务数量)就越低。最后发现线程的 Thread Dump 全部都卡在日志写入的等待中。测试了半小时,写出来将近4个G的日志。后来把日志级别调整到warn之后,TPS马上提高了一个量级。
如果使用log4j,有以下几点建议:
1. 把日志的级别调高,减少日志的输出量。所以在写代码的时候要明确哪些用debug,哪些用info,哪些用warn。基本上,在大型应用的生产环境中,日志级别调整到warn是可以接受的。
2. 在代码中,如果是debug级别的,通常这个也是代码中出现最多的,这个时候,建议:if (log.isDebugEnable()) {} ,这样可以预判断是否可以写入这个级别的日志,减少虚拟机创建对象(就是log.debug("xxxx" + yyyy.toString()) 中的参数)的消耗。
其他的日志框架没有用过,只是针对log4j有这样的建议,希望对你有所帮助。
毛毛子????
answered 11 years, 8 months ago