JVM常用指令
- 1.准备工作
- 2.jps
- 3. jconsole
- 4.jstat
- 5.jstack
- 6.jmap
- 7.jvisualvm工具
- 8.自动dump内存信息
1.准备工作
在idea中编写代码
public class JVMTest {
@Test
public void test() throws InterruptedException {
while (true) {
Thread.sleep(1000);
System.out.println(123);
}
}
}
配置虚拟机的设置

配置如下:保证堆大小始终是10M
-Xms10m -Xmx10m

之后运行程序即可。
2.jps
jps 查看java进程概述

3. jconsole
输入jconsole 打开java监控和管理控制台

选择

选择不安全链接

点击-内存,可以查看年轻代垃圾收集的次数

看右下角,鼠标悬浮第一列

看右下角,鼠标悬浮第二列

看右下角,鼠标悬浮第三列

可以发现峰值处发生GC

点击线程标签

点击VM概要

4.jstat
jstat 观察gc情况
常用
jstat -gcutil 进程号

查看年轻代gc信息
jstat -gcnew 进程号

查看老年代gc信息
jstat -gcold 进程号

5.jstack
jstack 查看进程内的线程信息
jstack 进程号

6.jmap
jmap 查看堆内存使用状况
常用指令
这里的file是当前路径
jmap -dump:file=文件名 进行号

文件生成

jmap -heap 进行号

7.jvisualvm工具
jdk中自带该工具,去jdk的安装目录中bin下找jvisualvm.exe用管理员打开即可

双击进入监控界面

概述中,可以看到堆内存配置的大小

监控中可以点击触发垃圾回收

点击堆dump类似jmap -dump 操作

点击dump之后,可以查看基本信息

点击类之后可以查看类的实例占用的内存大小

刚才下载的dump文件,可以用这个工具查看

在概要中可以查看信息

类中可以查看占用的内存

因为linux系统中没有相关的图形化界面,我们的做法是利用jmap -dump:file=文件名称 进程号 dump文件到指定路径,然后下载dump文件后,在本机windows系统中通过jvisualvm工具来查看。
8.自动dump内存信息
更改虚拟机配置
-Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError

更改java代码
public class JVMTest {
@Test
public void test() throws InterruptedException {
ArrayList<Integer> list = new ArrayList<>();
int i = 0;
while (true) {
list.add(i);
}
}
}
点击运行,发现直接OOM了

我们去项目相关文件夹中,找到dump的文件

jvisualvm工具装载dump文件,通过概要查看

类中可以查看具体的错误信息














![[oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem](https://img-blog.csdnimg.cn/img_convert/e4f80bad8b3d604ffac2559771b41ba5.png)





