常用 Linux 命令

常用 Linux 命令

查看运行中应用的进程号

ps -ef | grep ${应用名称}

find-pid-by-application

通过进程号查询应用占用的端口

netstat -anp | grep ${PID}

find-port-by-pid

端口被占用,如何查看占用应用的进程号?

netstat -tunlp | grep ${port}

find-pid-by-port

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

find-java-application

查看进程 GC 信息

jstat -gcutil {pid} {interval/ms}

gc-info
各列说明:

  • 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}

jvm-heap-info

dump 文件

jmap -dump:format=b,file=dump.hprof {pid}

下载生成的 dump.hprof 文件,使用 MAT 或 Jprofiler 工具分析。