在 CentOS 上定位 Java 日志/错误,通常按下面几个思路来排查,从“看得见的地方”到“看不见的地方”。
ps -ef | grep java
# 或
jps -l
如果能看到进程,记下 PID 和 启动命令(看 -D 参数、日志路径)。
多数 Java 项目会用:
/var/log/xxx/logs/# 常见位置
ls /var/log/
ls /opt/xxx/logs
ls ~/project/logs
# 实时查看
tail -f app.log
# 查找 ERROR
grep -n ERROR app.log
grep -n Exception app.log
如果是 nohup 或 systemd 启动:
nohup java -jar app.jar > app.out 2>&1 &
查看:
tail -f app.out
systemctl status xxx
journalctl -u xxx -f
journalctl -u xxx --since "10 min ago"
当 Java 直接挂掉 时,可能会生成:
hs_err_pid<pid>.log
一般在:
/tmpfind / -name "hs_err_pid*.log" 2>/dev/null
重点看:
ReasonCurrent threadStacktop -p PID
free -h
top -Hp PID
把高 CPU 的线程 ID 转成 16 进制:
printf "%x\n" 线程ID
再抓栈:
jstack PID | grep -A 20 0x线程ID
如果卡顿、变慢:
jstat -gcutil PID 1000
看:
FGC 是否很多O 是否接近 100%netstat -tunlp | grep java
ss -tunlp | grep PID
# 1. 进程
jps -l
# 2. 日志
tail -f /path/to/app.log
# 3. 错误关键字
grep -nE "ERROR|Exception|OutOfMemory" app.log
# 4. JVM 崩溃
find / -name hs_err_pid*.log
如果你愿意,可以把: