log4j的性能瓶颈定位与性能优化(org.apache.log4j.spi.RootLogger)
最近执行一个项目调优,发现使用第三方的Json库导致性能差。原以为问题就这么定位到了,结果去掉Json操作后,性能也不见好转。
现象非常诡异:CPU、内存、网络、磁盘使用率均有剩余,而且压力也是足够的。即使施加更大压力,吞吐量也不见好转。
于是监控了一下Java进程状态,发现几乎所有进程都处在
状态:BLOCKED 在 org.apache.log4j.spi.RootLogger@6b2b48e5 上,拥有者: http-0.0.0.0-8080-2010
阻塞总数:188,661 等待总数: 2,699
堆栈追踪:
org.apache.log4j.Category.callAppenders(Unknown Source)
org.apache.log4j.Category.forcedLog(Unknown Source)
org.apache.log4j.Category.log(Unknown Source)
org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:110)
……
写日志这么影响性能?初步怀疑代码或配置问题。请教了一下使用log4j的类似项目的朋友,确定是配置问题:未给log4j配置写缓冲。
修改log4j配置文件 /usr/local/jboss/server/default/deploy/higkoo.war/WEB-INF/log4j.xml ,红色部分为添加缓冲的配置项:
<appender name="MyLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/logs/higkoo/MyLog.log" />
<param name="encoding" value="UTF-8" />
<param name="DatePattern" value="'.'yyyy.MM.dd" />
<param name="Append" value="true" />
<param name="BufferSize" value="8192" />
<param name="ImmediateFlush" value="false" />
<param name="BufferedIO" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} %m [%c]%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="debug" />
<param name="levelMax" value="debug" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
OK,添加缓冲后,阻塞现象立马消失。性能达到最佳,CPU全部耗尽。
分享到:
相关推荐
要加载自己的Log4j配置文件,可以在Java代码中指定配置文件路径,例如使用`PropertyConfigurator.configure("path/to/config/file.properties")`,或者在类路径下放置名为`log4j.properties`或`log4j.xml`的文件,...
首先,我们需要创建一个log4j的配置文件,通常命名为`log4j.properties`。这个文件定义了日志处理的规则。以下是一个基本的配置示例: ```properties # 设置全局日志级别为DEBUG log4j.rootLogger=DEBUG, ...
解压“log4j.zip”后,我们通常会找到一个名为“log4j.properties”或“log4j.xml”的配置文件,这是Log4j的核心配置文件。例如,以下是一个简单的配置示例: ```properties # log4j.properties log4j.rootLogger=...
标题中的“Log4j自定义配置”指的是在Java应用程序中,使用Log4j框架进行个性化配置,以便更好地管理和控制日志记录的过程。Log4j是一个广泛使用的开源日志记录库,它提供了灵活的日志配置,使得开发者可以根据项目...
Log4j 入门配置 Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件、甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以...
Log4j的配置通常通过`log4j.properties`或`log4j.xml`文件完成。在这些文件中,可以定义Logger的级别、Appender的类型和目标,以及Layout的格式。例如,以下XML配置创建了一个名为"root"的日志器,将所有日志输出到...
### Log4j配置详解 #### 一、概述 在Java应用开发中,日志记录是一项重要的功能,它有助于开发者在开发、测试乃至生产环境中更好地理解应用程序的行为与性能表现。Apache Log4j是一款流行的日志框架,它允许用户...
根据提供的文件信息,我们可以深入探讨Log4j框架的配置与最佳实践。Log4j是一个流行的Java日志框架,被广泛应用于各种规模的应用程序中。它提供了灵活的日志记录功能,可以方便地定制日志级别、格式及输出目标等。...
Log4j的`BufferedIoAppender`可以缓冲日志输出,提高性能。同时,通过合理设置日志级别,避免不必要的日志记录,可以减少系统开销。 总结起来,Log4j是Java开发者不可或缺的日志工具,通过细致的配置,可以实现高效...
Log4j的核心优势在于其动态配置能力和丰富的API,这使得它能够在不修改源代码的情况下改变日志行为,极大地提升了程序的可维护性和灵活性。 Log4j的主要组件包括**Logger**、**Appender**和**Layout**: - **...
《Log4j完全手册》是一本详尽阐述Log4j日志框架的指南,它针对Java开发者,提供了全面的配置信息和深入的参数解析。Log4j是Apache软件基金会的一个项目,是Java平台上广泛使用的日志记录工具,因其灵活性、可配置性...
log4j 配置通常通过 XML 或 properties 文件进行,这使得在运行时无需修改代码就能调整日志行为。配置文件可以指定 Loggers、Appenders 和 Layouts,以及它们之间的关系。 **总结** log4j 通过 Logger、Appender 和...
- `log4j.appender.MAIL.BufferSize=10`: 缓冲区大小为10。 - `log4j.appender.MAIL.From=web@www.wuset.com`: 发件人邮箱地址。 - `log4j.appender.MAIL.SMTPHost=www.wuset`: SMTP服务器地址。 #### 三、总结 ...
1. **配置文件**:Log4j的配置通常通过一个名为`log4j.properties`或`log4j.xml`的文件进行。在这个例子中,我们假设使用`log4j.properties`,其中关键配置可能是这样的: ```properties # 设置根logger级别 log4j....
配置Log4j写入数据库,我们需要在`log4j.properties`或`log4j.xml`配置文件中设置DatabaseAppender。以下是一个基本示例: ```properties # log4j.properties配置示例 log4j.rootLogger=DEBUG, DB log4j.appender....
1. 配置文件:Log4j的配置通常在log4j.properties或log4j.xml文件中进行,通过配置,可以设定日志级别、Appender及Layout等。 2. 配置语法:配置文件中,使用XML或Properties语法,例如设置根Logger的级别、定义...
- 配置log4j.properties:在应用中配置log4j,指定日志级别、格式,并创建一个自定义Appender,该Appender与Flume agent通信,将日志发送到Flume。 **步骤3:搭建Kafka** - 安装和启动Kafka:安装Kafka集群,并...
- **全面配置文件**:为了更好地理解和使用log4j,建议阅读完整的配置文件示例,这有助于深入理解log4j的工作原理和配置选项。 以上内容详细介绍了log4j手册中的关键知识点,涵盖了日志记录的基本概念、主要组件的...
- `org.apache.log4j.PropertyConfigurator`:通过读取 properties 文件配置 Log4j。 - `org.apache.log4j.xml.DOMConfigurator`:通过读取 XML 文件配置 Log4j。 ##### 2.2 使用模式 - **Log4j 使用模式**:介绍...
为了提高性能,Log4j提供了异步日志记录和日志缓冲区等特性。正确配置和使用这些功能,可以显著降低日志记录对系统资源的影响。 6. **日志在实际项目中的应用** 在实际项目中,Log4j可以帮助进行错误排查、性能...