我的编程空间,编程开发者的网络收藏夹
学习永远不晚

记一次JVM内存溢出的处理过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

记一次JVM内存溢出的处理过程

概要

笔者所管理的测试一台业务服务器,近期经常被反馈应用卡顿并且出现过多次内存溢出,本篇为对此问题的处理过程的记录。
服务器环境采用Oracle JDK1.6,虚拟机为HosSpot,Web容器为Tomcat7。

处理过程

获取堆内存转储快照

在用户反馈系统卡顿时,登陆服务器通过命令查看内存使用情况

jps #获取java的进程IDjstat -gc 31795 #31795为jps查询到的进程ID

得到内存使用情况如下:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   932032.0 932032.0  0.0    0.0   932096.0 932096.0 5592448.0  5592448.0  131072.0 60017.9     20   13.991  69    892.270  906.260

从结果可以得知,堆内存已经达到容量上限,并且在不断的进行FGC,所以应用系统表现的特别卡顿。
通过jmap命令生成堆转储快照:

jmap -dump:format=b,file=heap.hprof 31795

出现以下提示则表示生成成功:

Attaching to process ID 31795, please wait...Debugger attached successfully.Server compiler detected.JVM version is 20.45-b01Dumping heap to heap.hprof ...Heap dump file created

分析堆转储快照

使用MemoryAnalyzer打开堆转储快照,但提示heap space的堆内存溢出的异常:

An internal error occurred during: "Parsing heap dump from 'java_pid4259.hprof'".Java heap space

修改配置MemoryAnalyzer.ini,调整堆内存大小

-Xms1024m-Xmx8192m

在MAT的Leak Suspects中,可以看到很详细的信息,有两个对象占用了大量的内存。
记一次JVM内存溢出的处理过程
通过查看线程信息发现为一个报表功能,该报表查询的数据量太大,而且sql效率比较低。
记一次JVM内存溢出的处理过程

优化思路

  • 限制报表提取条件,尽量控制报表的大小在合理范围内
  • 超大的报表采用其他实现方式,例如通过定时任务将报表生成存放在指定文件服务器,由用户自行下载
  • 本例中的报表会由jdbc的ResultSet 转成最终的报表对象,中间会经历很多中间步骤,例如Vetcory、ArrayList等,尽量减少中间步骤
  • 优化sql,尽快释放对象,可以被GC进行回收

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

记一次JVM内存溢出的处理过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

记一次JVM内存溢出的处理过程

概要笔者所管理的测试一台业务服务器,近期经常被反馈应用卡顿并且出现过多次内存溢出,本篇为对此问题的处理过程的记录。服务器环境采用Oracle JDK1.6,虚拟机为HosSpot,Web容器为Tomcat7。处理过程获取堆内存转储快照在用户
2023-06-02

jvm内存溢出如何处理

JVM内存溢出是指在Java虚拟机执行程序时,无法分配到足够的内存空间,导致程序异常终止。处理JVM内存溢出的方法有以下几种:1. 增加JVM的内存配置:可以通过修改JVM的启动参数,增加其可用的内存空间。可以通过-Xms参数设置JVM的初
2023-08-11

JVM:全面理解线上服务器内存溢出(OOM)问题处理方案(一)

0. 引言 前段时间生产上遇到了OOM问题,导致服务出现了短时间的不可用,还好处理及时,否则也将酿成大祸。OOM问题也是生产中比较重要的问题,所以本期我们针对OOM问题特别讲解,结合理论与实际案例来带大家彻底攻克OOM问题处理。 1. OO
2023-08-19

sql查询数据过多内存溢出怎么处理

当查询的数据过多导致内存溢出时,可以考虑以下几种处理方式:1. 使用分页查询:将查询结果分页返回,每次只查询一定数量的数据,避免一次性加载过多数据导致内存溢出。2. 优化查询语句:通过优化查询语句,减少返回结果集的大小。可以使用索引、合理地
2023-09-05

一次mysql的.ibd文件过大处理过程记录

一条zabbix微信的磁盘告警打破了往常的宁静收到告警之后发现是mysql的datadir目录,按着平时习惯开始排查;过程就不说了,最后发现某个库的目录大小异常,然后进去查看之后发现jdp_tb_trade.ibd过大,达到46G;跟真实
2022-06-29

Java内存溢出的处理方法是什么

这篇文章主要介绍“Java内存溢出的处理方法是什么”,在日常操作中,相信很多人在Java内存溢出的处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存溢出的处理方法是什么”的疑惑有所帮助!
2023-07-04

记一次线上服务CPU 100%的处理过程

告警正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。赶紧从会上下来,SSH登录服务器,使用 top 命令查看,几个Java进程CPU占用达到1
2019-08-04

Python 并发编程中的内存管理:避免内存泄漏和栈溢出

在 Python 并发编程中,管理内存至关重要,以避免内存泄漏和栈溢出,确保应用程序的高效运行和稳定性。
Python 并发编程中的内存管理:避免内存泄漏和栈溢出
2024-02-18

记录一次Oracle启动后几分钟自动Down机的处理过程

1.观察问题情况查找Oracle异常,通过alert日志观察。alert日志路径参考如下:startup mount;SQL> show parameter backNAME TYPE VALUE----------------------------
记录一次Oracle启动后几分钟自动Down机的处理过程
2017-06-06

[红色]一次性下载远程页面上的所有内容284435处理办法

[红色]一次性下载远程页面上的所有内容284435处理办法
2023-05-20

[红色]一次性下载远程页面上的所有内容284455处理办法

[红色]一次性下载远程页面上的所有内容284455处理办法
2023-05-20

[红色]一次性下载远程页面上的所有内容284607处理办法

[红色]一次性下载远程页面上的所有内容284607处理办法
2023-05-20

Linux之多线程以及多线程并发访问同一块内存的处理问题

目录为什么需要多线程?多线程的优点最佳应用场景多线程的缺点验证思路总结为什么需要多线程? 并行实体共享同一个地址空间和所有可用数据 的这种能力是多进程锁无法表达的,因为多进程具有不同的地址空间;线程比进程更加轻量级,更加快速;需要大量IO处
2023-03-23

SQLServer 错误 17803 在建立连接过程中出现内存分配错误。 减少不必要的内存负载,或增加系统内存。 该连接已关闭。%.*ls 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 17803 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 SRV_NOMEMORY 消息正文 ...
SQLServer 错误 17803 在建立连接过程中出现内存分配错误。 减少不必要的内存负载,或增加系统内存。 该连接已关闭。%.*ls 故障 处理 修复 支持远程
2023-11-05

SQLServer 错误 8651 未能执行所请求的操作,因为可用内存少于最小查询内存。 请减小“每次查询占用的最小内存”服务器配置选项的配置值。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 8651 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 MEMGRANT_ERR 消息正文 ...
SQLServer 错误 8651 未能执行所请求的操作,因为可用内存少于最小查询内存。 请减小“每次查询占用的最小内存”服务器配置选项的配置值。 故障 处理 修复 支持远程
2023-11-05

SQLServer 错误 41332 当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译的存储过程。 故障 处理 修复 支

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 41332 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 SQL_SNAPSHOT_NOT_SUPPORTED ...
SQLServer 错误 41332 当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译的存储过程。 故障 处理 修复 支
2023-11-05

SQLServer 错误 41307 已超出了内存优化表 number 字节的行大小限制。 请简化表定义。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 41307 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 HK_HEKATON_ROW_LIMIT 消息正文 ...
SQLServer 错误 41307 已超出了内存优化表 number 字节的行大小限制。 请简化表定义。 故障 处理 修复 支持远程
2023-11-04

SQLServer 错误 41349 警告:为包含具有持续性 SCHEMA_AND_DATA 的一个或多个内存优化表的数据库启用了加密。 不会对这些内存优化表中的数据加密。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 41349 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 HK_ENCRYPTION_ON 消息正文 ...
SQLServer 错误 41349 警告:为包含具有持续性 SCHEMA_AND_DATA 的一个或多个内存优化表的数据库启用了加密。 不会对这些内存优化表中的数据加密。 故障 处理 修复 支持远程
2023-11-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录