生产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语句触发的。

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

原文地址:https://www.cnblogs.com/coderdxj/p/12095171.html

时间: 2024-08-01 17:13:28

生产JVM问题排查解决的相关文章

13_FCITX输入法安装及问题排查解决

使用linux最沮丧的事情莫过于中文输入法切换不出来,甚至有人错误地认为,要使用中文输入法,必须把“区域和语言”(Region & Language)设置为中国-中文.输入法只是一个软件,和区域设置没有什么必然联系.如果你在初始化安装系统的时候,选择了中文,倒是会帮你把中文输 入法打包安装好. 所以和我一样使用en-us区域设置的朋友,如果输入法出了问题,怎么排查解决呢? 首选你必须安装一个中文输入法,推荐小企鹅 sudo yum install fcitx-pinyin 但是,安装完后,发现按

android mediaplayer VideoPlayerManager 加载视频闪屏问题排查解决

Android VideoPlayer 在滚动列表实现item视频播放(ListView控件和RecyclerView),在列表滚动时点击屏幕列表暂停,在item视频播放区域,视频播放时会出现闪屏问题. 排查解决,VideoPlayerManager->MediaPlayerWrapper.java->prepare() :                     { .prepareAsync().set(State.)(!= ) {                             

MySQL redo lock 死锁问题排查 & 解决过程

版权声明:本文由 MySQL redo lock 死锁问题排查 & 解决过程 张青林 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/181 来源:腾云阁 https://www.qcloud.com/community 周一上班,首先向同事了解了一下上周的测试情况,被告知在多实例场景下 MySQL Server hang 住,无法测试下去,原生版本不存在这个问题,而新版本上出现了这个问题,不禁心头一颤,心中不禁感到奇怪

Redis性能问题排查解决手册(七)

阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数据可分为10个类别,分别是: server clients memory persistence stats replication

启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”的解决方法!

原因:eclipse的版本与jre或者jdk版本不一致 对策:要么两者都安装64位的,要么都安装32位的,不能一个是32位一个是64位. 这种错误的原因可能性比较大,不排除其他因素 启动 Eclipse 弹出"Failed to load the JNI shared library jvm.dll"的解决方法!

Redis(二十一):Redis性能问题排查解决手册(转)

性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数据可分为10个类别,分别是: server clients memory persistence stats replication cpu commandstats cluster keyspace 这篇主要介绍比较重要的2部分性能指标memory和stats. 需要注意的是info命令返回的信息

记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程

环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其中一台服务器故障时才会把资源切换至另一台. 系统名称 系统版本 IP地址 备注 S-EIP-APP Windows2003ENTSP2 10.1.1.1 采用Windows2003自带的群集管理器实现双机热备功能 S-EIP-DATA Windows2003ENTSP2 10.1.1.2 故障表现

调整JVM堆内存解决OutOfMemoryError

今天在用 processing(http://zh.wikipedia.org/wiki/Processing) 编写处理 midi 文件的程序的时候,遇到了一个问题.程序主要是读取分析 midi ,然后用波形模拟 midi 中的信息,最后记录相应内容,创建 wav 文件.在使用 WaveFileWriter 写文件的时候,因为波形数据较多,使用 new byte[139708800] 创建了一个大小约为134M的 byte 数组,导致程序抛出 java.lang.OutOfMemoryErro

公司虚拟化平台VMware vCenter Server无法连接故障排查解决

1.环境: 系统:Windows 2008R2 vCenter版本:VMware vCenter Server 5.1.799731 数据库:Oracle 11.2.0 2.故障描述: 用VMware vSphere Client客户端无法登录,提示"出现未知连接错误.(由于连接故障,请求失败.无法连接到远程服务器)" 排错过程: 1.mstsc远程桌面到服务器. 打开服务器管理器--服务,找到vCenter的服务VMware VirtualCenter Server,发现服务没有启动