记一次Java内存溢出导致程序宕机的问题及排查


Hi, I’m Shendi


记一次Java内存溢出导致程序宕机的问题及排查




问题场景

今天在使用工具中的 word 转 pdf 出了问题,报502错误,打开服务器发现服务被关闭了,起初以为是误关,打开后重新转换又出现了这个问题,在项目文件夹下多了几个文件,打开才知道是因为内存溢出导致程序宕机了。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

对于这个问题,起初以为是上传文件导致的内存溢出,因为我服务器上内存只剩下几百兆了,而上传的文件近30MB,于是决定在本地测试一下,通过测试得知是转换部分的问题。



排查

对于我的这种情况还是比较好排查的,因为是我自己操作发现的。已经定位到了是哪个具体的接口出了问题

于是只需要在本地进行测试就可以了,通过代码检查内存

对于代码获取内存信息,需要用到 Runtime 的三个函数

  • totalMemory() - 当前占用的内存大小
  • freeMemory() - 未使用的内存大小(占用但还没有使用)
  • maxMemory() - 最大内存大小

通过打印输出,查看内存变化,定位问题的具体代码。

System.out.println("最大可用内存:" + Runtime.getRuntime().maxMemory());
System.out.println("当前内存:" + Runtime.getRuntime().totalMemory() + ", 未用内存: " + Runtime.getRuntime().freeMemory());

我在接口的开始,结束处,以及可能对内存有较大影响的地方都增加打印,因为接口开始即文件上传完成,所以最大的可能性是在转换的地方。

输出如下

// 接口开始 2020MB
最大可用内存:2118123520
// 49MB,31MB
当前内存:51380224, 未用内存: 33082008

// 转换前 --这里创建了输入输出流,以及拿到接口文件的数据 MultipartFile.getBytes()
// 117MB,68MB
当前内存:122683392, 未用内存: 71812848

// 转换后
// 2020MB,656MB
当前内存:2118123520, 未用内存: 688338112

由上面的数据可以分析出来,问题就是出在了转换上,转换将内存吃满了,这还是我本地调试。

以及在转换前,MultipartFile.getBytes() 拿到文件数据并通过这个数据创建输入流的操作也吃了一大内存,文件只是近30MB。还有很大的优化空间




END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/227525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis保证高可用的三种方式

Redis保证高可用主要有三种方式:主从、哨兵、集群。 主从复制了解吗? Redis主从复制简图 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)。且…

【EXCEL】offset函数

语法: offset(reference,row,column,[height],[width]) 例子:

Java网络编程 *TCP与UDP协议*

网络编程 什么是计算机网络? 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输 网络编程是干什么的? 网络…

UDS诊断 10服务

文章目录 简介诊断会话切换请求和响应1、请求2、子功能3、肯定响应4、否定响应5、特殊的NRC 为什么划分不同会话报文示例UDS中常用 NRC参考 简介 10服务,即 Diagnostic Session Control(诊断会话控制)服务用于启用服务器中的不同诊断会话&am…

【软件测试】系统测试

一、系统测试概念 系统测试(System Testing)是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起,在实际运行环境下,对计算机…

定兴县第三实验小学开展“宪法宣传周”系列活动

2023年12月4日是我国第十个国家宪法日,我校集中深入学习宣传宪法,弘扬宪法精神,维护宪法权威,开展“宪法宣传周”系列活动。 宪法主题升旗仪式 五(6)班薛谨熙同学以《学法懂法 与我同行》为主题做国旗下讲…

K-means算法通俗原理及Python与R语言的分别实现

K均值聚类方法是一种划分聚类方法,它是将数据分成互不相交的K类。K均值法先指定聚类数,目标是使每个数据到数据点所属聚类中心的总距离变异平方和最小,规定聚类中心时则是以该类数据点的平均值作为聚类中心。 01K均值法原理与步骤 对于有N个…

共创共赢|美创科技获江苏移动2023DICT生态合作“产品共创奖”

12月6日,以“5G江山蓝 算网融百业 数智创未来”为主题的中国移动江苏公司2023DICT合作伙伴大会在南京成功举办。来自行业领军企业、科研院所等DICT产业核心力量的百余家单位代表参加本次大会,共话数实融合新趋势,共拓合作发展新空间。 作为生…

9.关于Java的程序设计-基于Springboot的家政平台管理系统设计与实现

摘要 随着社会的进步和生活水平的提高,家政服务作为一种重要的生活服务方式逐渐受到人们的关注。本研究基于Spring Boot框架,设计并实现了一种家政平台管理系统,旨在提供一个便捷高效的家政服务管理解决方案。系统涵盖了用户注册登录、家政服…

Java se的语言特征之封装

目录 封装的概念常见的一些包静态成员变量代码块 封装的概念 可以理解为套壳屏蔽细节,将数据和操作数据的方法进行有机的结合,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互 从语法的层面来理解就是,被private修饰的成员变或者成员方法,只能在当前类中使用,但是可以…

力扣541.反转字符串 II

文章目录 力扣541.反转字符串 II示例代码实现总结收获 力扣541.反转字符串 II 示例 代码实现 class Solution {public String reverseStr(String s, int k) {char[] ans s.toCharArray();for(int i0;i<ans.length;i2*k){int begin i;int end Math.min(ans.length-1,begin…

3、Linux_系统用户管理

1.Linux 用户管理 1.1概述 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。root用户是系统默认创建的管理员账号。 1.2添加用户 语法 useradd […

QT----Visual Studio打开.ui文件报错无法打开

问题 在我安装完qt后将它嵌入vs&#xff0c;后新建的文件无法打开ui文件 解决方法 右击ui文件打开方式,添加,程序找到你qt的安装目录里的designer.exe。点击确定再次双击就能够打开。

【每日一题】重新规划路线

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;深度优先搜索方法二&#xff1a;广度优先搜索 写在最后 Tag 【深搜】【广搜】【树】【2023-12-07】 题目来源 1466. 重新规划路线 题目解读 题目给定一张由 n个点&#xff08;使用 0 到 n−1 编号&#xff09;&#…

Linux查看命令的绝对路径

linux查看命令的绝对路径 在Linux中&#xff0c;可以使用以下命令来查看命令的绝对路径&#xff1a; 1、which 命令名 例如&#xff0c;要查看chronyc命令的绝对路径&#xff0c;可以运行&#xff1a; which chronyc 2、whereis 命令名 例如&#xff0c;要查看chronyc命令…

好单库无代码API集成:广告推广与营销系统的高效电商平台连接方式

电商平台与无代码API集成的协同效应 随着数字化浪潮的不断推进&#xff0c;电子商务的生态正在快速演变。在这个过程中&#xff0c;电商平台的实时数据同步和高效运营对于保持竞争力至关重要。好单库作为电商领域的一大创新&#xff0c;提供了无需编程的API集成解决方案&#…

lv11 嵌入式开发 IIC(上) 19

目录 1 IIC总线简介 1.1 串行、半双工&#xff08;同时只能1收或者1发&#xff09; 1.2 IIC总线通信过程 2 IIC总线信号实现 2.1 IIC总线寻址方式 2.2 起始信号和停止信号 2.3 字节传送与应答 2.4 同步信号 2.5 典型IIC时序 3 练习 1 IIC总线简介 1.1 串行、半双工&a…

6.1 U-boot的使用

由于Ubuntu出现了一些问题&#xff0c;后面都是使用正点原子官方版本。 一、U-boot使用 1. U-boot源码 Linux 系统要启动需要通过 bootloader 程序引导&#xff0c;也就说芯片上电以后先运行一段 bootloader 程序。这段 bootloader 程序会先初始化 DDR 等外设&#xff0c;然后…

77. 组合

组合 描述 : 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 题目 : LeetCode 77. 组合 : 77. 组合 分析 : 请看回溯怎么回事 , 里面讲的很清晰 . 解析 ; class Solution {public List<List<Integ…

看图学源码之 CopyOnWriteArrayList 源码分析

基本简介&#xff1a; 是Java中的一个线程安全的List实现&#xff0c;也是ArrayList 的安全版本&#xff0c;所以就不会有ArrayList 的并发修改异常 的问题产生了 原理 每次在对 List 进行修改时&#xff0c;创建一个新的副本&#xff08;即拷贝&#xff09;&#xff0c;而不…