您当前的位置: 首页 >  Java

衣舞晨风

暂无认证

  • 1浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java 内存 占用高 模拟及排查

衣舞晨风 发布时间:2018-03-29 21:36:47 ,浏览量:1

模拟线上排查内存占用高的问题

1、模拟代码如下

package com.jiankunking.memory;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by jiankunking on 2018/3/29.
 */
@Component
public class memReaper {
    @PostConstruct
    public void memReaper() {
        long start = System.currentTimeMillis() / 1000;
        List list = new ArrayList();
        while (true) {
            HashMap map = new HashMap();
            map.put("aaa", "nnnn");
            list.add(map);
            if (list.size() > 3000000) {
                System.out.println("clear");
                list.clear();
            }
            if ((System.currentTimeMillis() / 1000) - start > 1000) {
                return;
            }
        }
    }
}

2、打包

mvn clean package  -Dmaven.test.skip=true

3、部署运行

java -jar cpu-mem-occupy-simulate-0.0.1-SNAPSHOT.jar

这里写图片描述 4、查看系统资源占用情况

top -c

这里写图片描述

5、根据PID dump heap文件

jmap -dump:live,format=b,file=heap_dump 3638

这里写图片描述 6、安装下载MAT工具 http://www.eclipse.org/mat/

7、用mat工具打开第5步中的文件 这里写图片描述

找到Problem Suspect 这里写图片描述

点击打开See stacktrace.如下:

 Thread Stack


main
  at java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; (HashMap.java:628)
  at java.util.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; (HashMap.java:611)
  //注意这里 内存占用高的地方
  at com.jiankunking.memory.memReaper.memReaper()V (memReaper.java:22)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:498)
  at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(Ljava/lang/Object;)V (InitDestroyAnnotationBeanPostProcessor.java:369)
  at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(Ljava/lang/Object;Ljava/lang/String;)V (InitDestroyAnnotationBeanPostProcessor.java:312)
  at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; (InitDestroyAnnotationBeanPostProcessor.java:135)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; (AbstractAutowireCapableBeanFactory.java:423)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(Ljava/lang/String;Ljava/lang/Object;Lorg/springframework/beans/factory/support/RootBeanDefinition;)Ljava/lang/Object; (AbstractAutowireCapableBeanFactory.java:1702)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(Ljava/lang/String;Lorg/springframework/beans/factory/support/RootBeanDefinition;[Ljava/lang/Object;)Ljava/lang/Object; (AbstractAutowireCapableBeanFactory.java:583)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(Ljava/lang/String;Lorg/springframework/beans/factory/support/RootBeanDefinition;[Ljava/lang/Object;)Ljava/lang/Object; (AbstractAutowireCapableBeanFactory.java:502)
  at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(Ljava/lang/String;Lorg/springframework/beans/factory/support/RootBeanDefinition;[Ljava/lang/Object;)Ljava/lang/Object; (AbstractBeanFactory.java:312)
  at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$73.getObject()Ljava/lang/Object; (Unknown Source)
  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(Ljava/lang/String;Lorg/springframework/beans/factory/ObjectFactory;)Ljava/lang/Object; (DefaultSingletonBeanRegistry.java:228)
  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Object;Z)Ljava/lang/Object; (AbstractBeanFactory.java:310)
  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ljava/lang/String;)Ljava/lang/Object; (AbstractBeanFactory.java:200)
  at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons()V (DefaultListableBeanFactory.java:760)
  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V (AbstractApplicationContext.java:868)
  at org.springframework.context.support.AbstractApplicationContext.refresh()V (AbstractApplicationContext.java:549)
  at org.springframework.boot.SpringApplication.refresh(Lorg/springframework/context/ApplicationContext;)V (SpringApplication.java:752)
  at org.springframework.boot.SpringApplication.refreshContext(Lorg/springframework/context/ConfigurableApplicationContext;)V (SpringApplication.java:388)
  at org.springframework.boot.SpringApplication.run([Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext; (SpringApplication.java:327)
  at org.springframework.boot.SpringApplication.run([Ljava/lang/Class;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext; (SpringApplication.java:1246)
  at org.springframework.boot.SpringApplication.run(Ljava/lang/Class;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext; (SpringApplication.java:1234)
  at com.jiankunking.CpuMemOccupySimulateApplication.main([Ljava/lang/String;)V (CpuMemOccupySimulateApplication.java:10)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:498)
  at org.springframework.boot.loader.MainMethodRunner.run()V (MainMethodRunner.java:48)
  at org.springframework.boot.loader.Launcher.launch([Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V (Launcher.java:87)
  at org.springframework.boot.loader.Launcher.launch([Ljava/lang/String;)V (Launcher.java:50)
  at org.springframework.boot.loader.JarLauncher.main([Ljava/lang/String;)V (JarLauncher.java:51)

8、原因明确 问题解决。

本文参考: https://blog.csdn.net/qq_16681169/article/details/53296137 演示代码下载: https://download.csdn.net/download/xunzaosiyecao/10316715

个人微信公众号: 这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.1672s