运维必备:JRE 命令行工具高效排查指南
Java Runtime Environment(JRE)下载
-
新手入门优先掌握:
java -version(验证环境)、jps(找进程)、jconsole(可视化监控),能解决 80% 的基础问题; -
服务器排查优先用:
jstat(GC 监控)、jstack(线程问题)、jmap(内存快照),无图形界面也能精准定位问题; -
所有工具均随 JRE 内置,无需额外安装,直接在命令行执行即可(确保 JRE 的 bin 目录在 Path 环境变量中)。
一、基础验证类工具:java(核心运行工具)
功能
这是 JRE 最核心的命令行工具,用于运行 Java 程序(.class/.jar 文件),也可验证 JRE 版本、配置 JVM 参数。
基本用法
bash
运行
java [可选参数] 程序入口类/JAR包路径
实操示例
1. 验证 JRE 版本(最常用)
bash
运行
# 查看JRE版本、架构、虚拟机类型
java -version
输出解读(以 Temurin 17 为例):
plaintext
openjdk version "17.0.9" 2023-10-17 LTS # JRE版本
OpenJDK Runtime Environment Temurin-17.0.9+9 (build 17.0.9+9-LTS) # 运行时环境
OpenJDK 64-Bit Server VM Temurin-17.0.9+9 (build 17.0.9+9-LTS, mixed mode, sharing) # JVM类型(64位Server VM)
2. 运行 JAR 包(桌面 / 服务器程序通用)
bash
运行
# 基础运行(默认堆内存)
java -jar demo.jar
# 自定义堆内存运行(解决内存溢出)
java -Xms256m -Xmx1024m -jar demo.jar # 初始堆256M,最大堆1G
# 无控制台运行桌面程序(Windows专属,避免控制台窗口)
javaw -jar desktop-app.jar
3. 查看 JVM 默认参数(调优前参考)
bash
运行
java -XX:+PrintFlagsFinal -version
用途:查看 JRE 默认的堆内存、GC 收集器等配置,为调优提供基准。
二、进程查看工具:jps(Java Process Status)
功能
相当于 Java 版 “任务管理器”,快速查看当前运行的所有 Java 进程(PID + 程序名),无需在系统任务管理器里逐个找。
基本用法
bash
运行
jps [可选参数]
常用参数:
-l:显示程序完整入口类 / JAR 包路径(最实用);-v:显示进程的 JVM 启动参数;-m:显示程序运行时传入的参数。
实操示例
1. 基础查看 Java 进程
bash
运行
jps
输出示例:
plaintext
12345 demo.jar # PID=12345,运行的程序是demo.jar
67890 Jps # Jps自身的进程(每次运行都会生成)
2. 查看完整路径 + JVM 参数
bash
运行
jps -lv
输出示例:
plaintext
12345 com.example.DemoApplication -Xms256m -Xmx1024m # 完整类名+JVM参数
67890 sun.tools.jps.Jps -lv # Jps自身进程
用途:确认目标程序是否用了预期的 JVM 参数(比如堆内存是否配置正确)。
三、可视化监控工具:jconsole
功能
图形化工具,实时监控 Java 程序的内存、线程、GC、类加载等状态,新手也能快速定位内存飙升、线程阻塞问题。
基本用法
bash
运行
# 直接启动,自动扫描本机Java进程
jconsole
# 连接远程服务器的Java进程(需配置远程调试)
jconsole 远程IP:端口
实操步骤(新手必看)
- 执行
jconsole,弹出窗口后选择要监控的 Java 进程(比如 PID=12345 的 demo.jar),点击 “连接”; - 进入监控界面后,重点看这几个标签:
- 内存:查看堆 / 非堆内存使用趋势,若内存持续上涨不下降,可能有内存泄漏;
- 线程:查看线程数量,点击 “检测死锁” 可自动排查死锁(超实用);
- GC:查看垃圾回收次数、耗时,判断 GC 是否频繁(频繁 GC 会导致程序卡顿);
- 类:查看已加载的类数量,确认是否有类加载异常。
四、深度分析工具:jvisualvm(Java VisualVM)
功能
比 jconsole 更强大的可视化分析工具,支持内存快照分析、线程快照、GC 日志分析、插件扩展,是排查内存泄漏、死锁的核心工具。
基本用法
bash
运行
# 直接启动(JDK 8内置,JDK 11+需单独下载/安装插件)
jvisualvm
实操示例(排查内存泄漏)
- 启动 jvisualvm,左侧选择目标 Java 进程;
- 点击 “监视器” 标签 → 点击 “堆 dump”,生成内存快照文件(.hprof);
- 打开快照文件,切换到 “类” 标签,按 “实例数” 排序,若某个类的实例数异常多(比如几十万),大概率是内存泄漏(比如集合未释放引用);
- 可选:安装 “Visual GC” 插件(工具→插件→可用插件),直观查看 GC 分代内存使用情况。
五、GC 监控工具:jstat(JVM Statistics Monitoring Tool)
功能
命令行版 GC 监控工具,实时输出 GC 的详细统计数据(适合服务器无图形界面的场景),精准分析 GC 频率、耗时、内存回收效果。
基本用法
bash
运行
jstat -<选项> <进程PID> <采样间隔(ms)> <采样次数>
核心选项:
-gc:查看堆内存 + GC 整体统计;-gcutil:以百分比显示 GC 统计(最常用);-gccause:显示 GC 原因(比如是 YGC 还是 Full GC,以及触发原因)。
实操示例
1. 实时监控 GC(每 1 秒采样 1 次,共采样 10 次)
bash
运行
jstat -gcutil 12345 1000 10
输出示例:
plaintext
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 50.00 30.00 90.00 85.00 10 0.500 2 1.000 1.500
字段解读(新手重点看):
S0/S1:新生代 Survivor 区使用百分比;E:新生代 Eden 区使用百分比;O:老年代使用百分比;YGC:Young GC 次数,YGCT:YGC 总耗时;FGC:Full GC 次数,FGCT:Full GC 总耗时;GCT:GC 总耗时。
判断异常:若 FGC 次数频繁(比如 1 分钟几次),说明老年代内存不足,需调大堆内存或优化 GC 策略。
六、线程排查工具:jstack(Java Stack Trace)
功能
导出 Java 进程的线程快照(堆栈信息),核心用于排查死锁、线程阻塞、CPU 占用过高问题(服务器排查必备)。
基本用法
bash
运行
jstack <进程PID> > 线程快照.txt # 导出快照到文件,方便分析
实操示例(排查死锁)
- 先用
jps获取目标进程 PID(比如 12345); - 执行命令导出线程快照:
bash
运行
jstack 12345 > thread_dump.txt - 打开
thread_dump.txt,搜索关键词:Deadlock:直接定位死锁(jstack 会自动标记死锁线程);BLOCKED:查看阻塞的线程,分析阻塞原因(比如锁竞争);RUNNABLE:查看 CPU 占用高的线程(结合 top 命令)。
示例死锁提示:
plaintext
Found one Java-level deadlock:
=============================
Thread 1:
waiting to lock monitor 0x00007f8e9a006800 (object 0x000000076ab82000, a java.lang.Object),
which is held by Thread 2
Thread 2:
waiting to lock monitor 0x00007f8e9a008c00 (object 0x000000076ab82010, a java.lang.Object),
which is held by Thread 1
直接就能看出哪两个线程互相锁死,快速定位代码问题。
七、内存分析工具:jmap(Java Memory Map)
功能
导出 Java 进程的内存快照(堆转储),或查看内存使用概况,配合 jvisualvm/Mat 工具分析内存泄漏。
基本用法
bash
运行
# 导出堆内存快照(常用)
jmap -dump:format=b,file=内存快照.hprof <进程PID>
# 查看堆内存使用概况
jmap -heap <进程PID>
实操示例
- 导出内存快照:
bash
运行
jmap -dump:format=b,file=demo_heap.hprof 12345 - 用 jvisualvm 打开
demo_heap.hprof,分析哪些对象占用内存最多;注意:导出快照会短暂暂停程序(毫秒级),生产环境建议低峰期执行。
典型使用流程
遇到 Java 程序卡顿 → 用jps找 PID → 用jstat看 GC 是否频繁 → 用jconsole监控内存 / 线程 → 用jstack排查死锁 / 阻塞 → 用jmap导出快照分析内存泄漏。
更多推荐


所有评论(0)