java内存溢出分析

  • 测试代码
 1 package test;
 2 
 3 import java.util.LinkedList;
 4 import java.util.List;
 5 import java.util.UUID;
 6 
 7 public class DumpTest {
 8 
 9     public static void main(String[] args) {
10         List<String> s=new LinkedList<String>();
11         while (true) {
12             s.add(UUID.randomUUID().toString());
13         }
14     }
15 }
  • 配置测试用jvm参数

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=d:\test.hprof
  • 说明

HeapDumpOnOutOfMemoryError 内存溢出时dump文件保存在HeapDumpPath指定的位置,-XX:HeapDumpPath=/usr/local/tomcat 这样可以只指定保持的目录
-Xms20m 指定JVM初始内存为20m,-Xmx20m 指定JVM最大可用内存为20m

  • 运行结果

 

  • 软件准备

     下载Eclipse Memory Analyzer 并解压, 地址 http://www.eclipse.org/mat/downloads.php

 使用Eclipse Memory Analyzer打开d:\test.hprof文件

点击Finish之后生成分析报告

 

也可以使用jmap命令导出dump信息

linux# jmap -dump:file=/usr/local/tomcat/tomcat_8082/dumpfile01.hprof  12055

其中 12055 是进程号可以使用jps命令查看java进程信息

 

posted @ 2018-09-28 12:37  LDDXFS  阅读(491)  评论(0编辑  收藏  举报