返回顶部
首页 > 资讯 > 精选 >记一次JVM内存溢出的处理过程
  • 516
分享到

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

2023-06-02 13:06:17 516人浏览 安东尼
摘要

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

概要

笔者所管理的测试一台业务服务器,近期经常被反馈应用卡顿并且出现过多次内存溢出,本篇为对此问题的处理过程的记录。
服务器环境采用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进行回收

--结束END--

本文标题: 记一次JVM内存溢出的处理过程

本文链接: https://lsjlt.com/news/230236.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 记一次JVM内存溢出的处理过程
    概要笔者所管理的测试一台业务服务器,近期经常被反馈应用卡顿并且出现过多次内存溢出,本篇为对此问题的处理过程的记录。服务器环境采用Oracle JDK1.6,虚拟机为HosSpot,Web容器为Tomcat7。处理过程获取堆内存转储快照在用户...
    99+
    2023-06-02
  • jvm内存溢出如何处理
    JVM内存溢出是指在Java虚拟机执行程序时,无法分配到足够的内存空间,导致程序异常终止。处理JVM内存溢出的方法有以下几种:1. ...
    99+
    2023-08-11
    jvm
  • JVM的内存溢出异常说明
    本篇内容介绍了“JVM的内存溢出异常说明”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!举例说明含义:-Xss128k每个线程的java栈大小...
    99+
    2023-06-17
  • kafka内存溢出如何处理
    Kafka内存溢出可以通过以下几种方式进行处理: 增加Kafka的堆内存:可以通过调整Kafka的JVM参数,增加堆内存大小,例...
    99+
    2023-10-27
    kafka
  • JVM:全面理解线上服务器内存溢出(OOM)问题处理方案(一)
    0. 引言 前段时间生产上遇到了OOM问题,导致服务出现了短时间的不可用,还好处理及时,否则也将酿成大祸。OOM问题也是生产中比较重要的问题,所以本期我们针对OOM问题特别讲解,结合理论与实际案例来带大家彻底攻克OOM问题处理。 1. OO...
    99+
    2023-08-19
    jvm 服务器 java
  • JVM中内存区域与内存溢出的示例分析
    小编给大家分享一下JVM中内存区域与内存溢出的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java内存区域与内存溢出异常运行时数据区域程序计数器当前线程...
    99+
    2023-06-17
  • jvm内存溢出排查的步骤是什么
    排查JVM内存溢出的步骤可以分为以下几个步骤:1. 确认内存溢出问题:通过观察应用程序的行为和报错信息,确认是否存在内存溢出问题。2...
    99+
    2023-08-11
    jvm
  • sql查询数据过多内存溢出怎么处理
    当查询的数据过多导致内存溢出时,可以考虑以下几种处理方式:1. 使用分页查询:将查询结果分页返回,每次只查询一定数量的数据,避免一次...
    99+
    2023-09-05
    sql
  • 一次mysql的.ibd文件过大处理过程记录
    一条zabbix微信的磁盘告警打破了往常的宁静 收到告警之后发现是mysql的datadir目录,按着平时习惯开始排查;过程就不说了,最后发现某个库的目录大小异常,然后进去查看之后发现jdp_tb_trade.ibd过大...
    99+
    2022-06-29
    mysql .ibd文件特别大 mysql ibd文件过大 mysql中的ibd文件是啥
  • Java内存溢出的处理方法是什么
    这篇文章主要介绍“Java内存溢出的处理方法是什么”,在日常操作中,相信很多人在Java内存溢出的处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存溢出的处理方法是什么”的疑惑有所帮助!...
    99+
    2023-07-04
  • 记一次线上服务CPU 100%的处理过程
    告警正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。赶紧从会上下来,SSH登录服务器,使用 top 命令查看,几个Java...
    99+
    2019-08-04
    记一次线上服务CPU 100%的处理过程
  • 记一次存储故障导致数据库坏块处理过程
    记一次存储故障导致数据库坏块处理过程线上架构说明:    IBM DS4800存储一套     P560小机HA架构...
    99+
    2024-04-02
  • java内存管理与内存溢出异常的示例分析
    这篇文章主要介绍了java内存管理与内存溢出异常的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说到内存管理,笔者这里想先比较一下java与C、C++之间的区别:在C...
    99+
    2023-05-31
    java
  • 【故障处理】一次RAC故障处理过程
    【故障处理】一次RAC故障处理过程1.1  故障环境介绍 项目source dbdb 类型2节点RACdb version11.2.0.1.0db 存储ASMOS版本及kernel版本RHEL 6...
    99+
    2024-04-02
  • Python 并发编程中的内存管理:避免内存泄漏和栈溢出
    在 Python 并发编程中,管理内存至关重要,以避免内存泄漏和栈溢出,确保应用程序的高效运行和稳定性。 内存泄漏 内存泄漏是指应用程序在不再需要时无法释放占用的内存。在 Python 中,内存泄漏通常是由以下原因引起的: 循环引用:两...
    99+
    2024-02-18
    Python 并发编程 内存管理 内存泄漏 栈溢出
  • JVM 发生内存溢出的原因以及解决办法是怎样的
    JVM 发生内存溢出的原因以及解决办法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. Java 堆空间发生频率:5颗星造成原因无法在 Java 堆中...
    99+
    2023-06-02
  • 如何理解Java中的内存溢出问题
    这篇文章主要介绍“如何理解Java中的内存溢出问题”,在日常操作中,相信很多人在如何理解Java中的内存溢出问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Java中的内存溢出问题”的疑惑有所帮助!...
    99+
    2023-06-15
  • sql查询数据过多内存溢出的解决方法
    这篇文章主要介绍sql查询数据过多内存溢出的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!正常来说,一般是不会出现这种情况的,但也不能保证,偶尔有这种情况发生,解决方案如下:...
    99+
    2024-04-02
  • 记逆向小白的第一次vbsedit 9爆破及内存补丁制作过程
    作为一个搞破解、逆向的小白,第一发文,请各位大神多指教。 近期需要批量处理一些word和excel文档,开始一直用word的宏,但是发给同事用的时候同事老是不会啊。后来就想写一些VB...
    99+
    2024-04-02
  • 记一次数据库迁移的过程采坑过程
    迁移步骤 迁移数据库是一项需要很谨慎的任务。整个迁移过程大概分成以下几步: 备份原数据库数据 //备份数据库,并指定日期 mysqldump -uadmin -p****** databaseName | gzip > /databak...
    99+
    2020-08-01
    记一次数据库迁移的过程采坑过程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作