1. jps(推荐,JDK 自带,最简单)
需要安装 JDK(仅 JRE 没有 jps)
bash
# 只显示进程号+主类名
jps
# 显示完整主类路径
jps -l
# 显示JVM启动参数
jps -v
# 显示传入main方法的参数
jps -m
示例输出:
plaintext
12580 org.apache.tomcat.startup.Bootstrap
2. ps + grep 通用方式(无需依赖 JDK)
bash
# 基础查询
ps -ef | grep java
# 更干净,过滤掉grep自身进程
ps -ef | grep [j]ava
# 查看线程(jstack需要pid)
ps -T -p <进程PID>
3. pgrep 快速只获取 PID
bash
# 列出所有java进程pid
pgrep java
# 连同进程信息
pgrep -af java
4. 结合 top 查看 Java 进程资源占用
bash
# 全局看
top
# 只监控指定java进程
top -p <PID>
# H键显示线程(top界面内按H)
配套常用排查命令(拿到 PID 后)
bash
# 打印线程栈
jstack <PID>
# 堆内存概况
jmap -heap <PID>
# 导出堆dump
jmap -dump:format=b,file=heap.hprof <PID>
进程信息解读
plaintext
root 3755864 1 0 Aug04 ? 00:52:24 java --module-path /home/project/test-fws/lib --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED -server -Xms512m -Xmx1024m -jar /home/project/test-fws/jar/test-configure-server.jar --app.id=test-fws
- PID:3755864
- 运行用户:
root - 启动时间:Aug04(8 月 4 日启动)
- 运行时长:00:52:24 CPU 累计耗时 ≠ 进程运行时长
- 程序包:test
-configure-server.jar - JVM 参数:
-server:服务端模式-Xms512m:初始堆内存 512MB-Xmx1024m:最大堆内存 1GB--add-opens:打破模块封装,反射兼容旧代码
- 业务参数:
--app.id=test-fws
常用操作(直接复制,PID 替换为 3755864)
bash
# 1.查看完整启动命令(确认有无被截断)
cat /proc/3755864/cmdline | tr '\0' ' ';echo
# 2.查看当前堆内存使用
jmap -heap 3755864
# 3.打印线程栈(排查死锁、线程阻塞)
jstack 3755864 > thread.log
# 4.导出堆dump(内存溢出分析,谨慎!会暂停进程)
jmap -dump:format=b,file=ctg-fws-heap.hprof 3755864
# 5.实时观察CPU/内存
top -p 3755864
# 6.优雅停止服务
kill 3755864
# 强制停止(尽量不用)
# kill -9 3755864