在 CentOS 上排查 Java 日志异常,通常可以从日志位置、日志内容、系统环境、Java 运行状态几个方面入手。下面给你一套比较实用的排查思路和常用命令。
ps -ef | grep java
或
jps -l
常见位置:
/opt/app/logs/var/log/xxx/usr/local/tomcat/logs查看日志:
tail -f catalina.out
tail -f app.log
日志特征:
java.lang.OutOfMemoryError: Java heap space
排查步骤:
# 查看 JVM 内存参数
ps -ef | grep java
# 查看堆内存使用
jmap -heap <pid>
# 生成堆转储
jmap -dump:format=b,file=/tmp/heap.hprof <pid>
分析工具:
日志可能无明显异常,但系统卡顿。
top
找到高 CPU 的 PID 后:
top -Hp <pid>
拿到线程 ID(十进制转十六进制):
printf "%x\n" <tid>
查看线程栈:
jstack <pid> | grep <tid> -A 30
日志特征:
Connection refused
Timeout
Too many connections
排查:
# 端口连通性
telnet 127.0.0.1 3306
# 端口监听
netstat -tunlp | grep 3306
# 防火墙
firewall-cmd --list-all
CentOS 常见:
Permission denied
检查:
ls -l /path/to/log
whoami
日志时间不对或乱码:
date
locale
JVM 参数示例:
-Duser.timezone=Asia/Shanghai
-Dfile.encoding=UTF-8
/var/log/messages
/var/log/secure
dmesg | grep -i kill
| 工具 | 作用 |
|---|---|
| jps | 查看 Java 进程 |
| jstack | 线程栈 |
| jmap | 内存分析 |
| jstat | GC 状态 |
| jinfo | JVM 参数 |
示例:
jstat -gcutil <pid> 1000
tail -f 实时看日志如果你能贴一段具体的异常日志内容或说明是什么类型的 Java 应用(Spring Boot / Tomcat / 微服务),我可以帮你更精准地分析。