一、内存相关命令
本地启动一个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<Object> list = new ArrayList<>();
public static void main(String[] args) {
List<Object> 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 命令工具,通过可视化界面可以看出问题出现在哪。
文章仅供学习交流,侵权联系删除。