Ubuntu Java日志性能优化实战
一 框架选型与异步化
<Configuration status="WARN">
<Appenders>
<Async name="AsyncAppender">
<AppenderRef ref="Console"/>
</Async>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info"><AppenderRef ref="AsyncAppender"/></Root>
</Loggers>
</Configuration>
<configuration>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT"/>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>
<root level="info"><appender-ref ref="ASYNC"/></root>
</configuration>
二 日志级别与语句优化
logger.debug("User login, id={}", userId);logger.debug("User login, id=" + userId);三 输出目标与系统层面的 I/O 优化
immediateFlush=false 配合批量落盘,减少系统调用次数。/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
sharedscripts
postrotate
/bin/kill -HUP $(cat /var/run/myapp.pid 2>/dev/null) || true
endscript
}
四 Tomcat 与 JVM 的联动优化
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:ParallelGCThreads=4"
合理的堆与 GC 策略可减少因日志对象与频繁分配带来的 GC 压力,间接提升日志与业务稳定性。五 端到端链路与可观测性优化
index.refresh_interval: 30s)以提升写入吞吐。