一、内存相关命令
本地启动一个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 命令工具,通过可视化界面可以看出问题出现在哪。

文章仅供学习交流,侵权联系删除。
本文详细介绍了如何使用jmap命令分析Java应用内存情况,包括查看实例数量、占用内存及堆信息。通过实例演示了内存飙升问题的定位方法,并提供了JVM参数设置技巧。重点讲解了如何通过jvisualvm进行可视化分析。
7100

被折叠的 条评论
为什么被折叠?



