java内存溢出问题排查

一、使用工具

Eclipse Memory Analyzer tool, 简称MAT

下载地址:http://www.eclipse.org/mat/downloads.php

二、生成heap dump file (内存溢出时,自动生成)

1、问题代码

package com.mfy.vo;

public class User {
    private int id = 111;
    private String name ="aaaaaaas";
    
    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;
    }
}

package com.mfy.util;

public class LogTest {
 
    public static void main(String[] args) {
         oom();
    }

    private static void oom(){
        Map<String, User> map = new HashMap<String, User>();
        Object[] array = new Object[10000000];
        for(int i=0; i<10000000; i++){
            User p = new User();
            map.put(i+"rosen jiang", p);
            array[i]=p;
        }
        System.out.print("OK");
    }    
}



2、添加jvm参数

-Xms60m
-Xmx100m

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=D:\dev\log   (如果不设置该参数,默认日志文件生成路径在工程根目录下)


运行程序,如果发生了内存溢出,将生成文件名如java_pid10636.hprof的文件。

控制台打印出如下日志:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to D:\dev\log\java_pid9212.hprof ...
Heap dump file created [158609927 bytes in 0.696 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.resize(HashMap.java:462)
    at java.util.HashMap.addEntry(HashMap.java:755)
    at java.util.HashMap.put(HashMap.java:385)
    at com.mfy.util.LogTest.oom(LogTest.java:28)
    at com.mfy.util.LogTest.main(LogTest.java:20)


三、生成heap dump file(java命令生成)

只需要指定进程号即可。

如:

ps -ef|grep tomcat
jmap -dump:format=b,file=outfile.hprof 15088



四、分析heap dump file


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值