首先通过ps -ef | grep java命令列出所有Java进程,获取其PID(进程ID)和启动参数。Java应用的日志路径通常在启动参数中通过-Dlogging.file.name(Logback/Log4j2)或-Djava.util.logging.config.file指定,或在配置文件(如Spring Boot的application.properties)中设置(例如logging.file.name=logs/app.log)。若未明确配置,可检查应用部署目录下的logs文件夹或默认路径(如Tomcat的catalina.out)。
使用tail -f /path/to/java.log命令实时跟踪日志文件的最新内容,结合grep命令过滤关键错误信息:
grep "ERROR" /path/to/java.log:提取所有包含“ERROR”的行;grep -i "exception" /path/to/java.log:忽略大小写查找“exception”(如NullPointerException、ClassNotFoundException);tail -f /path/to/java.log | grep --color=auto "ERROR":高亮显示错误行,提升可读性。Java应用错误常与系统资源不足相关,需通过以下命令排查:
top(按P键按CPU排序)或htop(更直观),查看是否有进程占用过高CPU(如超过80%);free -m(查看内存使用量,-/+ buffers/cache行表示实际可用内存)、vmstat 1 5(每秒刷新一次,关注si/so列的交换分区使用情况,频繁交换可能导致性能下降);df -h(查看各分区使用率,若Use%接近100%,需清理日志或临时文件)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/app/gc.log,记录垃圾回收的详细信息(如Young GC/Old GC次数、耗时)。使用VisualVM或GCViewer工具分析GC日志,若Full GC频繁或耗时过长,需调整堆内存大小(-Xms/-Xmx)或优化对象生命周期;hs_err_pid<pid>.log文件(路径通常为/var/log/java/或进程工作目录)。该文件包含崩溃原因(如OutOfMemoryError、StackOverflowError)、线程堆栈、JVM版本等信息,是排查JVM层面问题的关键。Java应用常用日志框架(Log4j、Logback、SLF4J),冲突会导致日志无法正常输出:
logback.xml(默认在src/main/resources目录),Log4j2为log4j2.xml,需检查配置是否正确(如<root level="INFO">是否设置合理、<appender>是否指向正确日志文件);mvn dependency:tree命令查看依赖树,排除重复的日志框架(例如<exclusions>标签排除commons-logging)。journalctl查看Java服务的日志: journalctl -u java_service_name(java_service_name为服务名,如tomcat):查看特定服务的所有日志;journalctl -u java_service_name --since "1 hour ago":查看过去1小时的日志;journalctl -u java_service_name | grep "ERROR":过滤错误信息;dmesg | less,若日志中出现Out of memory: Kill process,说明系统因内存不足杀死了Java进程。当日志文件过大(如超过1GB)时,会影响系统性能且难以分析,需使用logrotate工具进行轮转:
/etc/logrotate.d/java(若不存在则创建),添加以下内容:/path/to/java/logs/*.log { daily # 每天轮转 rotate 7 # 保留7个备份 compress # 压缩旧日志(如.gz格式) missingok # 若日志文件不存在也不报错 notifempty # 若日志为空则不轮转 copytruncate # 复制原日志后清空,避免重启应用 } logrotate -d /etc/logrotate.d/java(模拟轮转,不实际执行);logrotate -f /etc/logrotate.d/java(强制立即轮转)。根据问题类型调整日志级别,减少无关日志干扰:
DEBUG或TRACE,输出详细信息(如SQL语句、方法调用链);INFO或WARN,仅输出关键信息(如请求响应时间、业务异常)。logback.xml)中的<root level="DEBUG">,或通过JMX动态调整(无需重启应用)。对于复杂的分布式系统,手动分析日志效率低,可使用以下工具:
ERROR日志数量超过阈值时发送邮件);jstack <PID>命令生成线程转储文件(包含所有线程的状态),通过FastThread或TDA(Thread Dump Analyzer)工具分析,若存在BLOCKED状态的线程,需检查同步代码(如synchronized块);jmap -heap <PID>查看堆内存使用情况(如各代内存占比),jmap -dump:format=b,file=heap.hprof <PID>导出堆转储文件,通过MAT(Memory Analyzer Tool)分析(如查看占用内存最多的对象)。