doc: 阅读jvm工具命令

This commit is contained in:
asahi
2025-12-17 15:49:19 +08:00
parent f09968653e
commit b579d930b2

View File

@@ -55,6 +55,11 @@
- [G1垃圾收集器](#g1垃圾收集器)
- [G1垃圾收集器内存布局](#g1垃圾收集器内存布局)
- [Remembered Set](#remembered-set)
- [虚拟机内存监控和故障处理工具](#虚拟机内存监控和故障处理工具)
- [jps](#jps)
- [jstat](#jstat)
- [jinfo](#jinfo)
- [jstack](#jstack)
# 深入理解java虚拟机
@@ -483,4 +488,57 @@ G1收集器中Region之间的对象引用以及其他收集器中新生代和老
<img src="https://ask.qcloudimg.com/http-save/5427637/ouqa71pbc7.jpeg" style="width: 100%;">
## 虚拟机内存监控和故障处理工具
### jps
该命令会列举出正在运行的java虚拟机进程并现实如下内容
- 进程ID
- 虚拟机执行MainClass名称
### jstat
jstat命令用于监视虚拟机各种运行状态信息。其可以显示本地、远程虚拟机进程中类装载、内存、垃圾收集、JIT编译等运行数据。
```bash
jstat [ option vmid [interval[s|ms] [count]]]
```
在上述格式中interval代表的是间隔count代表的是次数如果上述两个参数省略代表只查询一次。假设需要每250ms查询一次进程2764的垃圾收集情况一共查询20次那么具体命令如下
```bash
jstat -gc 2764 250 20
```
其中option代表用户希望查询的虚拟机信息主要分为3类
- 类装载
- 垃圾收集
- 运行期编译情况
| 选项 | 作用 |
| :-: | :-: |
| -class | 监视类装载、装载数量、总空间、类装载耗费时间 |
| -gc | 监视java堆内存情况包括eden区、s0/s1区、老年代、永久代等容量、已用空间、gc时间合计等信息 |
| -gccapacity | 内容和-gc基本相同输出主要关注java堆各个区域使用到的最大、最小空间 |
| -gcutil | 内容和-gc基本相同输出主要关注已使用空间占总空间的百分比 |
### jinfo
jinfo用于实时查看和调整虚拟机各项参数使用jps -v命令可以查看jvm启动时显式指定的参数列表。
但是想要了解未显式指定参数的默认值,可以通过
```bash
jinfo -flag
```
示例如下
```bash
jinfo -flag MaxHeapSize 5338
```
除此之外,还可以通过
```bash
jinfo -flags 5338
```
上述命令会输出所有参数。
info命令还支持打印出进程的`System.getProperties()`内容
```bash
jinfo -sysprops 5338
```
### jstack
jstack命令用于生成虚拟机当前时刻的线程快照即当前虚拟机每一个线程正在执行的方法堆栈集合。该命令主要用于定位线程长时间出现停顿的原因例如线程间死锁、死循环、长时间等待等。