查看运行中应用的进程号
ps -ef | grep ${应用名称}
通过进程号查询应用占用的端口
netstat -anp | grep ${PID}
端口被占用,如何查看占用应用的进程号?
netstat -tunlp | grep ${port}
后台运行应用
nohup ${cmd} > nohup.out 2>&1 &
OOM 问题排查
常见 OOM 类型
# 堆溢出
java.lang.OutOfMemoryError: Java heap space
# 栈溢出
java.lang.OutOfMemoryError: unable to create new native thread
# 方法区溢出
java.lang.OutOfMemoryError: Metaspace
# 直接内存溢出
java.lang.OutOfMemoryError: Direct buffer memory
# 超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常
java.lang.OutOfMemoryError: GC overhead limit exceeded
通过 SSH 登录到远程服务器
ssh {username}@{ip} -p {port}
> {password}
查看 java 进程号
jps -l
查看进程 GC 信息
jstat -gcutil {pid} {interval/ms}
各列说明:
-
S0: 新生代中Survivor space 0区已使用空间的百分比
-
S1: 新生代中Survivor space 1区已使用空间的百分比
-
E: 新生代已使用空间的百分比
-
O: 老年代已使用空间的百分比
-
P: 永久带已使用空间的百分比
-
YGC: 从应用程序启动到当前,发生Yang GC 的次数
-
YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
-
FGC: 从应用程序启动到当前,发生Full GC的次数
-
FGCT: 从应用程序启动到当前,Full GC所用的时间
-
GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】
查看进程堆内存快照详情
jmap -heap {pid}
dump 文件
jmap -dump:format=b,file=dump.hprof {pid}
下载生成的 dump.hprof
文件,使用 MAT
或 Jprofiler
工具分析。