前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >new ArrayList 不当导致 CPU 飙升。。

new ArrayList 不当导致 CPU 飙升。。

作者头像
用户1220090
发布于 2025-03-24 05:19:17
发布于 2025-03-24 05:19:17
7500
代码可运行
举报
文章被收录于专栏:芋道源码芋道源码
运行总次数:0
代码可运行

前言

首先问题是这样的,周五正在写文档,突然收到了线上报警,发现cpu占用达到了90多,上平台监控系统查看容器,在jvm监控中发现有一个pod在两个小时内产生了61次youngGc一次fullGc,这个问题特别严重且少见,由于我之前也没有排查过此类问题,所以也是百度,但整个过程也有一些自己的思考,所以跟大家分享一下~

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

当时场景

我先给大家看一下一副正常的gc曲线监控(为保密性,我自己按照平台监控画了出来):

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

正常的jvm监控曲线图

正常的jvm监控曲线图

产生问题的jvm监控曲线图

产生问题的jvm监控曲线图

可以看的出来,正常情况下该系统很少gc(具体看业务系统使用情况、jvm内存分配),但是在图二中出现了大量异常的gc情况甚至触发了fullGc,所以我当时立马进行了分析。

具体分析

首先异常gc的情况只出现在一个pod上(系统有多个pod),在监控系统找到对应的pod,进入pod内部查看问题原因,排查问题一定要冷静

  1. 进入pod之后,输入top查看各linux进程对系统资源的使用情况(因我这是事后补稿,资源使用不高,大家看步骤即可)
  1. 分析资源使用情况在当时的情况下

top

当时我的pid为1的进程cpu上到了130(多核)那我认定就是java应用出问题了,control+c退出继续往下走

  1. 输入top -H -p pid 通过此命令可以查看实际占用CPU最高的的线程的id,pid为刚才资源使用高的pid号

top -H -p pid

  1. 出现具体线程的资源使用情况,表格里的pid代表线程的id,我们称他为tid

tid

  1. 我记得当时的tip为746(上述图片只是我给大家重复步骤),使用命令printf "%x\n" 746,将线程tid转换为16进制

tid转换为16进制

因为我们线程id号在堆栈里是16进制的所以需要做一个进制转换

  1. 输入jstack pid | grep 2ea >gc.stack
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jstack pid | grep 2ea >gc.stack

jstack

解释一下,jstack是jdk给提供的监控调优小工具之一,jstack会生成JVM当前时刻的线程快照,然后我们可以通过它查看某个Java进程内的线程堆栈信息,之后我们把堆栈信息通过管道收集2ea线程的信息,然后将信息生成为gc.stack文件,我随便起的,随意

  1. 当时我先cat gc.stack 发现数据有点多在容器里看不方便,于是我下载到本地浏览,因为公司对各个机器的访问做了限制,我只能用跳板机先找到一台没用的机器a,把文件下载到a然后我再把a里的文件下载到本地(本地访问跳板机OK),先输入python -m SimpleHTTPServer 8080,linux自带python,这个是开启一个简单http服务供外界访问

开启http服务

然后登录跳板机,使用curl下载curl -o http://ip地址/gcInfo.stack

为方便演示,我在图中把ip换了一个假的

curl

之后用同样的方法从本地下载跳板机就可以了,记得关闭python开启的建议服务嗷

  1. 把文件下载到了本地,打开查看编辑器搜索2ea,找到nid为2ea的堆栈信息

找到nid为2ea的堆栈信息

之后找到对应的impl根据行数分析程序

  1. 发现是在文件异步导出excel的时候,导出接口使用了公共列表查询接口,列表接口查询数据最多为分页200一批,而导出数据量每个人的权限几万到十几万不等

导出excel

并且该判断方法使用了嵌套循环里判断,且结合业务很容易 get 不到 value,Java 下的new ArrayList 就是返回一个 List 集合(好像不用说这么细 (;一_一 ),在整个方法结束之前,产生的 lists生命周期还在所以发生多次gc触发重启之后还影响到了别的pod。然后对代码进行了fix,紧急上线,问题解决~

结束语

遇到生产问题,大家不要害怕,遇到问题先保证服务是否可用,然后通过有限的信息层层解析,找出最终的问题。如果你会 arthas,排查起来会更轻松!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
6 条评论
热度
最新
真不错👍
真不错👍
回复回复1举报
真不错[强]
真不错[强]
回复回复1举报
有些期待,如果之后免费就好了。
有些期待,如果之后免费就好了。
回复回复1举报
请问这个要怎么体验🤞🤞🤞
请问这个要怎么体验🤞🤞🤞
回复回复1举报
什么时候开放使用啊,gpt要么收费要么就得梯子,用起来麻烦死了。
什么时候开放使用啊,gpt要么收费要么就得梯子,用起来麻烦死了。
回复回复1举报
真不错哎
真不错哎
回复回复点赞举报
推荐阅读
一文读懂麦克风典型应用电路
本文介绍麦克风典型应用电路和注意事项。应用电路设计的好坏,会直接影响麦克风的输出性能,从而影响用户的使用体验。
硬件大熊
2022/06/23
3.6K0
一文读懂麦克风典型应用电路
硬件笔记(21)---- MEMS数字麦克风
PDM是一种最常见的数字麦克风接口。这种接口允许两个麦克风共享一个公共的时钟与数据线。每个麦克风被配置为在时钟信号的不同沿产生各自的输出。这样两个麦克风的输出就能保持相互同步,设计师就能确保来自每个通道的数据被同时捕获到。
小火柴棒
2020/08/14
2.5K0
麦克风阵列声源定位程序_麦克风阵列怎么设置
利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival (DOA) estimation),DOA估计的其中一种方法是计算到达不同阵元间的时间差,另外一种可以看这里,这篇主要介绍经典的GCC-PHAT方法
全栈程序员站长
2022/11/09
1.9K0
麦克风阵列声源定位程序_麦克风阵列怎么设置
智能麦克风 - 下一代的MEMS麦克风技术
包括VESPER在内的诸多MEMS和IC厂商推出了数字智能麦克风产品。如Vesper的VM3011,其内部封装了ASIC芯片和压电(piezoelectric)MEMS传感器。ZPL(Adaptive ZeroPower Listening)技术可以自动的拾取,分析和学习环境的实时音频信号特征(acoustic characteristics),从而允许系统可以忽略掉背景噪音(background noise),仅对唤醒词和其他声音事件作出反应。
用户6026865
2020/09/24
1.8K0
智能麦克风 - 下一代的MEMS麦克风技术
嵌入式软件中如何验证麦克风的好坏?
实现项目量产过程中,要测试一些外设,比如智能音箱的麦克风测试,测试麦克风的步骤比较复杂,比如验证麦克风的一致性,降噪算法等等,这里只是初步验证下麦克风的好坏,验证麦克风的好坏无非就是录音,然后查看录音文件数据。
程序手艺人
2019/02/21
1.5K0
往期精选:基于 FPGA 和麦克风阵列的高速高精度声源定位系统设计
频繁杂乱的鸣笛声,不但给周边居民的生活质量造成很大影响,而且增加了驾驶员的疲劳,影响行驶安全,并使乘客和行人在出行时倍感烦躁不安。在大多 数城市的道路上,时常出现禁止鸣笛的标志,然而并不是所有人都能自觉地遵守 规则,对鸣笛之人进行适当的处罚是确保这项规定能够顺利实施的必要举措。
FPGA技术江湖
2025/04/10
3560
往期精选:基于 FPGA 和麦克风阵列的高速高精度声源定位系统设计
浅析硬件“好声音”:麦克风技术指标及选型指南
这类设备中都集成了麦克风和喇叭等电声器件,其中麦克风用于识别用户的声音,喇叭用于播放设备对用户指令的反应。麦克风的性能是影响语音唤醒率高低的重要因数,而喇叭的性能会影响打断唤醒率和用户的主观体验。接下来将分两篇文章对麦克风和喇叭的一些主要性能参数进行解析,给大家在产品设计时选择声学器件提供一些帮助。
硬件大熊
2022/06/23
3.1K0
浅析硬件“好声音”:麦克风技术指标及选型指南
麦克风阵列波束形成
波束形成 beamforming 体现的是声源信号的空域选择性,许多传统波束形成方法具有线性处理结构;波束形成需要考虑三个方面: 1.麦克风阵列个数;
全栈程序员站长
2022/07/02
1.1K0
FFmpeg-iOS获取摄像头麦克风
FFmpeg_allluckly.cn.png Mac编译ffmpeg获取FFmpeg-iOS ffmpeg的H.264解码 FFmpeg-iOS推流器的简单封装 今天咱来讲讲在iOS 平台上利用ffmpeg获取到摄像头和麦克风,代码很少,后面再加上iOS 自带的获取摄像头的例子; FFmpeg获取摄像头麦克风 首先导入必要的头文件 #include <stdio.h> #ifdef __cplusplus extern "C" { #endif #include <libavcodec/avco
Bison
2018/07/04
1.7K0
基于麦克风阵列的现有声源定位技术有_阵列原理
本发明涉及声源的定位,更具体地讲,涉及一种使用麦克风(MIC)阵列来对声源 定位的方法。
全栈程序员站长
2022/11/09
8940
Windows去除麦克风录音电流声
工作原因,几乎每天都会各种会议软件语音或共享屏幕实时解决问题,有时候也需要录屏阐释问题解决方案,这些刚需场景下,录音质量就很关键,换了很多耳麦,几十、几百、几千的录音设备都用了,就是有电流声。后来搜了下资料,发现调整系统配置就可以解决,试了下还真解决了。
Windows技术交流
2022/10/12
2.2K0
webrtc之摄像头加麦克风实战!
大家周末好,今天给大家继续分享webrtc的文章,在上周分享的文章里面,介绍了如何打开本地摄像头来实时显示采集画面,不过当时代码是用js写的,不知道大家有没有看明白,感兴趣的朋友可以用vs把代码跑起来看看。
用户6280468
2022/03/21
1.8K0
webrtc之摄像头加麦克风实战!
智能语音交互中的麦克风阵列技术
近年来,随着语音识别技术的发展成熟,语音交互越来越多的走进我们的生活。从苹果手机Siri助手的横空出世开始,各大公司纷纷效仿开发自己的语音助手和语音识别平台,手机端的近场语音交互日趋成熟。后来Amazon发布Echo智能音箱,开启了智能硬件远场语音交互时代。相比于Siri手机端近场的语音交互,Echo音箱的语音交互支持距离更远,交互更加自然便捷,它使用了麦克风阵列来保证远距离复杂背景噪声和干扰环境下的良好拾音效果,随后麦克风阵列逐渐成为了后续语音交互智能硬件的标配。
DancingWind
2019/08/01
11.1K0
智能语音交互中的麦克风阵列技术
麦克风声源定位原理_一种利用麦克风阵列进行声源定位的方法与流程
20世纪80年代以来,麦克风阵列信号处理技术得到迅猛的发展,并在雷达、声纳及通信中得到广泛的应用。这种阵列信号处理的思想后来应用到语音信号处理中。在国际上将麦克风阵列系统用于语音信号处理的研究源于1970年。1976年,Gabfid将雷达和声纳中的自适应波束形成技术直接应用于简单的声音获取问题。1985年,美国AT&T/Bell实验室的Flanagan采用21个麦克风组成现行阵列,首次用电子控制的方式实现了声源信号的获取,该系统采用简单的波束形成方法,通过计算预先设定位置的能量,找到具有最大能量的方向。同年,Flanagan等人又将二维麦克风阵列应用于大型房间内的声音拾取,以抑制混响和噪声对声源信号的影响。由于当时技术的制约,使得该算法还不能够借助于数字信号处理技术以数字的方式实现,而主要采用了模拟器件实现,1991年,Kellermann借助于数字信号处理技术,用全数字的方式实现了这一算法,进一步改善了算法的性能,降低了硬件成本,提高了系统的灵活性。随后,麦克风阵列系统已经应用于许多场合,包括视频会议、语音识别、说话人识别、汽车环境语音获取、混响环境声音拾取、声源定位和助听装置等。目前,基于麦克风阵列的语音处理技术正成为一个新的研究热点,但相关应用技术还不成熟。
全栈程序员站长
2022/11/08
1.5K0
即插即用,玩转直播,森海塞尔 Profile USB 麦克风兼具易用性与卓越音质
韦德马克,2023 年 3 月 14 日 — 今日,森海塞尔正式推出Profile USB麦克风,这款心形电容麦克风使用简单、造型时尚,适合直播和播客等应用场景。通过将专业音质、丰富功能及易用性相结合,森海塞尔Profile USB麦克风令直播主播、播客主播和游戏玩家能够完全专注于内容创作。这款侧向拾音麦克风提供桌面基础套装(建议零售价:人民币 1199 元)和配备三点自锁式悬臂架的 Profile 主播套装(建议零售价:人民币 1849 元)。这两款产品选项均于今日正式上架开售。
云上计算
2023/03/15
7490
即插即用,玩转直播,森海塞尔 Profile USB 麦克风兼具易用性与卓越音质
iOS相机、麦克风等权限的判断与设置
一、iOS应用权限检测 在涉及到这个问题的时候,首先为了适配iOS10系统,我们必须首先在info.plist文件中声明将要用到的权限,否则将会引起崩溃如下: “This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key
梧雨北辰
2018/04/24
3.9K0
iOS相机、麦克风等权限的判断与设置
耳麦插入电脑无法识别使用麦克风的解决方案
夜梦这里买了一个耳麦,3.5mm接口的。但是当夜梦插入耳麦的时候,遇到了一个小问题——无法识别并且使用麦克风!在查找了资料以后,夜梦发现了问题所在,那就是配置没选对。具体的问题描述以及解决方案往下看。
夜梦星尘
2024/08/20
6450
耳麦插入电脑无法识别使用麦克风的解决方案
CapSpeaker:基于电容器的麦克风声音注入攻击
语音助手可以被各种恶意语音命令操纵,但现有的攻击需要附近的扬声器来播放攻击命令。在本文中展示了即使在没有扬声器可用的情况下,也可以利用电子设备内部的电容器来播放恶意命令,即将电容器转换为扬声器,并将其称为 CapSpeaker。本质上,由于逆压电效应,电容器会发出声学噪声,即改变电容器两端的电压会使其振动,从而发出声学噪声。强制电容器播放恶意语音命令具有挑战性,因为:
CDra90n
2023/03/13
1.4K0
CapSpeaker:基于电容器的麦克风声音注入攻击
[ 音频篇 ] 如何实现麦克风多个音频流通道数据的分离
项目量产过程中需要验证麦克风的好坏,需要通过麦克风录音,查看录音数据确定麦克风的好坏,但实际过程中产品有4个麦克风,录音回来的数据需要做数据分离,然后才能确定到底哪个麦克风出现问题。
程序手艺人
2019/02/20
1.7K0
【100个 Unity实用技能】| Unity中检测 设备麦克风权限
在Unity中可以通过调用API检测可以从devices属性中获得已连接麦克风的列表 从而 判断有没有麦克风权限
呆呆敲代码的小Y
2022/10/28
1.1K0
推荐阅读
相关推荐
一文读懂麦克风典型应用电路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档