当前位置: 首页 > news >正文

【outOfMemoryError】排查思路与解决方案

前言

不好啦❗ 天塌了❗ 系统崩了❗

快看啊,程序outOfMemoryError了🙈

我的心里活动:“哈哈哈😀哈哈哈😀终于给我碰上了,这个问题可很少发生啊,又积累一个问题。虽然我昨天发了版本,但是作为公司技术最好,长得最帅的我,代码肯定不出现这个问题。”

不想看废话的直接看【解决过程和方案】 吧

排查过程


theme: juejin

前言

不好啦❗ 天塌了❗ 系统崩了❗

快看啊,程序outOfMemoryError了🙈

我的心里活动:“哈哈哈😀哈哈哈😀终于给我碰上了,这个问题可很少发生啊,又积累一个问题。虽然我昨天发了版本,但是作为公司技术最好,长得最帅的我,代码肯定不出现这个问题。”

不想看废话的直接看【解决过程和方案】 吧

排查过程

在这里插入图片描述

首先肯定是先看日志,根据日志信息可以看到三个关键信息:
1. 业务代码中调用了远程接口
2. 内存溢出outOfMemoryError
3. Arrays.copyOf(Arrays.java:3332)

猜想❔

得到关键信息后,看了代码之后我就和技术经理做了一个简单的讨论

  • 技术经理:调用远程接口没有设置超时时间,访问人数突然增多,导致请求阻塞。瞬间一万个请求进来,然后一个万的请求就阻塞了,从而导致内存溢出

  • 我的猜想:请求之前没有查询大量的数据,就算请求阻塞也不会占用大量内存,导致outOfMemory. 还有就是Tomcat的线程池也默认200,。就算一万个请求进来,同一时刻也最多处理200个请求,这个200个请求都阻塞的话会造成 系统卡死,但是不会出现outOfMemoryError

    虽然抛出了一个业务代码的错误,但是并不能肯定就是它引发的outOfMemoryError,也可能是其他任务占了太多内存,这个请求只是一根“稻草”

解决过程和方案✔

  1. 修改启动命令,导出堆信息
    定位outOfMemoryError 还得用证据说话呀! 让技术经理在启动命令上加了如下参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof 再次出现内存溢出就会将堆信息导出。

  2. 分析堆信息,定位大内存对象
    因为之前已经装过分析dump文件的工具了,我用的是Intellij Profiler工具,打开堆快照文件如下:
    在这里插入图片描述

    根本问题已经浮出水面了,KbResultSetList<UnionCustomerCheckLog>这两个对象几乎把内存撑满了,jvm 堆内存最大1024M 这两个就占了700M. 算是定位到问题了吧! 也推翻了技术经理说的调用远程接口大量请求被阻塞的问题。

  3. 查找GC回收日志
    我们搜索自己的业务包名字就行了,这样就能很快定位关键问题。发现存在service 名称 和 上面大对象的名称一致UnionCustomerCheckLog

    同样的搜索方式在summary栏目搜索,也能匹配上,并且定位到代码方法queryXXPassList()
    在这里插入图片描述

  4. 定位问题代码 、分析代码
    找到关键代码之后我们就看看代码吧:

    在这里插入图片描述

    select * ? 这个写法是开发禁忌哦,加上这个sql 的查询的结果有40W 条了。

    看看这个查询有啥用呢❓ 看看伪代码吧

    下面代码就是用代码实现的分组统计…没错就是我们 Android 工程师写的,因为公司去年就不用维护客户端了,安卓写java,ios写前端。
    刚好上午给老哥指出问题,下午就被人事约谈,领了大礼包了。

    // 查询出需要的所属数据:40w条
    List<UnionCustomerCheckLog> xxPassList = unionCustomerCheckLogService.queryXXPassList();// 分组统计
    Map<Integer, List<UnionCustomerCheckLog>> unionMap =xxPassList.stream().collect(Collectors.groupingBy(UnionCustomerCheckLog::getSource));for (DictModel dict : modelList) {ChartVo vo = new ChartVo();vo.setName(dict.getText());List<UnionCustomerCheckLog> checkLogList = unionMap.get(Integer.valueOf(dict.getValue()));if (Objects.isNull(checkLogList)) {vo.setNumber(0L);} else {// 统计长度vo.setNumber((long) checkLogList.size());}voList.add(pieChartVo);
    }
    
  5. 解决问题
    既然上面已经分析出问题所在了,就是Android老哥还不太会分组统计,就把数据全部查询到内存中统计。导致outOfMemoryError.
    解决方法修改统计,改成SQL分组统计就行了:
    在这里插入图片描述

    程序逻辑也相应的调整就行了。

总结

由于工程师分组统计方式错误的实现,本来在数据库统计就行了,然而Android老哥却全部查询出来,然后再程序统计导致的内存溢出。

本篇文章分享了我去排查outOfMermoryError问题的过程,希望能帮到你,感谢一键三连🚀🚀🚀

有趣的是,上午定位到问题,并确认是Android老哥写的,下午老哥就被约谈了,喜提大礼包。最近公司大裁员呀,已经裁了三分之一了,老哥们祝福我吧🧡🧡🧡

相关文章:

【outOfMemoryError】排查思路与解决方案

前言 不好啦❗ 天塌了❗ 系统崩了❗ 快看啊&#xff0c;程序outOfMemoryError了&#x1f648; 我的心里活动&#xff1a;“哈哈哈&#x1f600;哈哈哈&#x1f600;终于给我碰上了&#xff0c;这个问题可很少发生啊&#xff0c;又积累一个问题。虽然我昨天发了版本&#xff0…...

Python蓝桥杯刷题-小数第n位详解

题目描述 我们知道&#xff0c;整数做除法时&#xff0c;有时得到有限小数&#xff0c;有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0&#xff0c;它们就有了统一的形式。 本题的任务是&#xff1a;在上面的约定下&#xff0c;求整数除法小数点后的第 n 位开…...

Ubuntu服务器 /data 盘需要手动挂载的解决方案

服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后&#xff0c;发现 /data 盘 没有自动挂载&#xff0c;通常是因为&#xff1a; /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别&#xff0c;需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...

无法打开包括文件: “crtdbg.h”: No such file or directory

目录 无效解决措施(重装WindowsSDK) 有效解决措施 创建环境变量 添加环境变量INCLUDE 添加环境变量LIB RC无法运行 问题现象描述 复制以下文件至Error路径 无效解决措施(重装WindowsSDK) 参考文献&#xff1a;94176676/227706449-a5222d7d-d8d2-4a19-addb-8f546e69786f…...

番茄工作法html实现

对比了deepseek-r1-online和本地部署的14b的版本&#xff0c;输出的输出的html页面。 在线满血版的功能比较强大&#xff0c;可以一次完成所有要求。14b版本的功能有一些欠缺&#xff0c;但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...

多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题

多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”&#xff0c;通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解&#xff1a; 目录 一、原理分析 1. 单源 BFS vs…...

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库...

我们来学人工智能 -- DeepSeek客户端

DeepSeek客户端 题记使用后记系列文章 题记 我选择了 Cherry Studio是国内产品由CherryHQ团队开源是一个平台在这里&#xff0c;有豆包、kimi、通义千问的入口当然&#xff0c;最主要是作为大模型的UI正如标题&#xff0c;这里&#xff0c;作为DeepSeep的客户端 使用 下载本…...

【Linux】匿名管道的应用场景-----管道进程池

目录 一、池化技术 二、简易进程池的实现&#xff1a; Makefile task.h task.cpp Initchannel函数&#xff1a; 创建任务&#xff1a; 控制子进程&#xff1a; 子进程执行任务&#xff1a; 清理收尾&#xff1a; 三、全部代码&#xff1a; 前言&#xff1a; 对于管…...

JavaScript函数-函数的使用

在JavaScript编程中&#xff0c;函数不仅是组织代码的基本单元&#xff0c;也是实现复杂逻辑、提高代码复用性和可维护性的关键工具。无论你是刚开始学习JavaScript的新手&#xff0c;还是希望深入理解函数使用的开发者&#xff0c;本文都将为你提供全面的指导。 函数的基础知…...

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后&#xff0c;用户可以回复评论, 回复的评论可以被再次回复, …...

Android输入事件传递流程系统源码级解析

1. 硬件层到Linux内核 设备节点&#xff1a;触摸事件由内核驱动捕获&#xff0c;写入/dev/input/eventX。关键结构体&#xff1a;input_event&#xff08;包含时间戳、类型、代码、值&#xff09;。 2. Native层处理&#xff08;system_server进程&#xff09; 2.1 EventHub …...

自制操作系统学习第七天

今天要做什么&#xff1f; 实现HLT&#xff0c;不让计算机处于HALT&#xff08;HLT&#xff09;.用C语言实现内存写入&#xff08;错误&#xff0c;需要分析&#xff09; 一:使用HLT&#xff0c;让计算机处于睡眠状态 写了下面这个程序&#xff0c;naskfunc.nas 函数名叫io_h…...

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...

Coze插件之基于IDE创建插件

上篇文章中&#xff0c;我们基于已有服务创建了一些插件和工具。方便我们开发更多工作流和智能体应用。 本篇文章要介绍的是基于IDE进行创建&#xff0c;为什么有了基于服务创建后还有基于IDE进行创建呢&#xff1f;基于IDE进行创建有哪些优势&#xff1f; 对于一些简单操作&…...

deepseek的模型经过训练 ai写出了linux 64位加壳软件

1. 加壳程序的设计目标 目标&#xff1a;保护64位Linux下的可执行文件&#xff0c;使其难以被反编译或调试。核心功能&#xff1a; 在运行时加载原始可执行文件并解密。隐藏壳代码和原程序的真正入口点。提供一定的反调试机制。 2. 思路 加壳流程&#xff1a; 加载器&#xf…...

解锁音频新境界:LALAL.AI 与 Audo Studio 深度解析

在音频处理的世界里&#xff0c;噪音常常是困扰我们的一大难题。无论是专业的音频工作者&#xff0c;还是普通的音频爱好者&#xff0c;都渴望拥有一款强大的工具来解决这个问题。今天&#xff0c;就为大家介绍两款来自 AI 工具导航&#xff08;AIDH.NET&#xff09;的 AI 语音…...

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…...

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量&#xff0c;提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗&#xff1f; 是的&#xff0c;文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…...

【C++】const关键字的作用及常见应用场景

一、核心作用 用于定义“常量”&#xff0c;限制程序对变量的修改&#xff0c;提升代码安全性和可读性。其核心作用包括&#xff1a; 避免误修改&#xff1a;明确标识不可变数据。编译器优化&#xff1a;常量可被放入符号表&#xff0c;减少内存访问&#xff0c;优化执行效率…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...