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文件,通过概要查看
类中可以查看具体的错误信息