Ubuntu下Java日志故障排查实操指南
一、快速定位路径与先决检查
二、应用日志框架与级别配置
三、JVM与系统层面的关键日志
四、常见症状与对应动作清单
| 症状 | 优先动作 | 关键命令或配置 |
|---|---|---|
| 启动失败/类找不到 | 核对classpath与依赖版本 | java -cp “.:/path/lib.jar” YourMainClass;检查依赖冲突 |
| CPU飙高 | 抓取线程栈定位热点 | jstack |
| 频繁Full GC/停顿长 | 打开GC日志并分析趋势 | -Xloggc;jstat -gcutil |
| 进程突然退出 | 查系统日志与OOM线索 | tail /var/log/syslog;-XX:+HeapDumpOnOutOfMemoryError |
| 磁盘写满 | 清理旧日志/调整滚动策略 | logback TimeBasedRollingPolicy;logrotate |
| Web请求异常 | 同步查看容器与应用日志 | tail -f logs/catalina.out app.log |
五、可直接套用的最小配置示例
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!-- 临时调试某个包 -->
<logger name="com.example" level="DEBUG"/>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
JAVA_OPTS="-Xms512m -Xmx2048m \
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/var/log/java/gc.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/java/dumps/"
/var/log/java/*.log {
daily
rotate 30
missingok
compress
delaycompress
copytruncate
notifempty
}
提示:生产环境将root level设为INFO/WARN,仅在排障时临时调为DEBUG;开启异步日志可减少I/O抖动。