zoukankan      html  css  js  c++  java
  • 生产JVM问题排查解决

    收集内存溢出Dump文件

    收集Dump文件有两种方式:

    • 设置JVM启动参数
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=/opt/jvmdump

    在每次发生内存溢出时,JVM会自动将堆转储,dump文件存放在-XX:HeapDumpPath指定的路径下。

    • 使用jmap命令收集
      通过jmap -dump:live,format=b,file=/opt/jvm/dump.hprof pid。

    分析Dump文件

    在获取Dump文件后,可以使用工具MAT(MemoryAnalyzer)进行分析,该工具大家可以通过百度自行下载。

    使用MAT打开Dump文件后,首页截图如下:

     

     工具按钮介绍:

    :内存使用树状结构,以线程为维度,树状形式展开,如图所示:

    从上面的截图中可以得出如下关键信息点:

    • org.apache.ibatis.executor.result.DefaultResultHandler内部持有一个List,其原始为java.util.HashMap,从这个类基本可以看出是与数据库的查询相关,对数据库返回结果的解码并组织成HashMap。

    • 这个List中的元素总共有146033个,初步可以判断出是在一次查询中从数据库中一次查询出了太多数据,造成了内存溢出。

    由于SQL查询代码中,是用HashMap来接收数据库中的返回字段,无法一时间看出是那个查询,那我们能不能精确找到是哪一个查询,哪一行代码,甚至与哪一条SQL

    接下来我们从 视图去寻找是哪个方法,哪条SQL语句触发的。

    具体方法:首先完全展开一个线程,从展开图的底部向上寻找:
    其线程的入口(控制层代码)

  • 相关阅读:
    指示函数
    Sql Server中的日期与时间函数
    http://www.jb51.net/softjc/33896.html(vs2010破解)
    什么是VC维?
    smalldatetime和datetime的差别
    基于大规模语料的新词发现算法
    向setInterval , setTimeout调用的函数传递参数
    取指定月份的天数
    SQL 写循环数据
    JavaScript事件一瞥
  • 原文地址:https://www.cnblogs.com/coderdxj/p/12095171.html
Copyright © 2011-2022 走看看