在 CentOS 上用 Java 日志定位问题,通常可以按下面几个步骤来做:
/opt/app/logs/、/var/log/app//var/log/messages/var/log/syslog(CentOS 一般没有,主要是 messages)journalctl -u your-java-service.service -n 200
journalctl -u your-java-service.service --since "2024-01-01 10:00"
ps -ef | grep java
确认:
-Dlog.path=-Xloggc:如:
app.logerror.loginfo.log查看方式:
tail -f app.log
tail -n 500 error.log
grep "ERROR" app.log
如果启动参数有:
-Xloggc:/var/log/app/gc.log
查看:
less /var/log/app/gc.log
关注:
journalctl -u your-service -n 100
或看启动日志:
cat nohup.out
重点看:
ExceptionCaused byPermission deniedAddress already in usegrep -i "exception" app.log
grep -A 20 "NullPointerException" app.log
top
找到 Java 进程 PID,再看线程:
top -Hp PID
把线程 ID 转成 16 进制:
printf "%x\n" 线程ID
再 dump 线程:
jstack PID | grep -A 30 0x线程id
日志里通常会有:
java.lang.OutOfMemoryError
配合:
jmap -heap PID
jmap -dump:live,format=b,file=heap.hprof PID
用 MAT / VisualVM 分析。
# 实时看日志
tail -f app.log
# 按时间看
grep "2024-01-01 10:" app.log
# 看错误
grep -i error app.log
# 看堆栈
grep -A 30 "Exception" app.log
# 看某个接口
grep "order/create" app.log
logback / log4j2info / warn / errortraceId如果你愿意,可以把具体报错日志或现象贴出来(比如 OOM、连接超时、CPU 100%),我可以直接帮你定位。