内存飙升问题定位

目录

  • 一、内存相关命令
  • 二、内存飙升问题定位Demo

一、内存相关命令

本地启动一个web服务,用 jps 命查看对应进程。
在这里插入图片描述
1.查看内存信息,实例个数以及占用内存大小。

jmap -histo PID > ./log.txt

在这里插入图片描述

打开文件部分内容如下

字段说明
num序号
instances实例数量
bytes占用空间大小
class name类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]

在这里插入图片描述

2.查看堆信息

jmap -heap PID

在这里插入图片描述
堆内存 dump

jmap ‐dump:format=b,file=eureka.hprof PID

在这里插入图片描述
在这里插入图片描述
也可以设置内存溢出自动导出dump文件,但是要注意内存很大的时候,可能会导不出来。

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ (路径)

二、内存飙升问题定位Demo

测试Demo

public class User {private int id;private String name;byte[] a = new byte[1024*100];public User(){}public User(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class OOMDumpTest {public static List list = new ArrayList<>();public static void main(String[] args) {List list = new ArrayList<>();int i = 0;int j = 0;while (true) {list.add(new User(i++, UUID.randomUUID().toString()));new User(j--, UUID.randomUUID().toString());}}
}
 

JVM参数设置

‐Xms10M ‐Xmx10M ‐XX:+PrintGCDetails ‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=D:\test\jvm.dump

在这里插入图片描述

将生成的 jvm.dump 文件装入 jvisualvm 命令工具,通过可视化界面可以看出问题出现在哪。
在这里插入图片描述

文章仅供学习交流,侵权联系删除。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章