Serverless冷扩机器在压测中被击穿问题 | 京东云技术团队

news2024/10/6 10:30:49

一、现象回顾

在今天ForceBot全链路压测中,有位同事负责的服务做Serverless扩容(负载达到50%之后自动扩容并上线接入流量)中,发现新扩容的机器被击穿,监控如下(关注2:40-3:15时间段的数据),我们可以看到,超高CPU,频繁FullGC,并且每次FullGC之后对内存并不回收(见FullGC时间段对应的堆内存的曲线,是一条横线)

分析结论: 内存已经被处理线程全部占完,FullGC之后基本收不回多少内存,那么意味着很快又会继续FullGC,频繁FullGC占用大量CPU时间片段和暂停会导致系统处理能力剧烈下降,最终导致整个JVM进入崩溃状态

二、问题重现

如上只是我们的理论分析,我们重新进行现象回放,模拟问题重现,目前订单单机400QPS下,CPU大概是达到30-40%,我们模拟一下在没有提前预热(重启Java服务)的情况下,使用压测脚本对服务进行请求回放,如下是我们一次重现的结果 (非必定,会有一定的概率重现),同样的高CPU、频繁FullGC,对内存无法被回收,JVM直接进入崩溃状态

分析结论: 我们需要避免瞬间流量让服务进入超高负载,进而被击穿

三、解决方案

针对如上情况,我们尝试使用Sentinel的系统规则,在系统负载过高的时候自动进行熔断,避免系统过载导致被击穿,我们设置一条CPU不超过80%的系统保护规则,如下,通过后面几个过程,我们对比一下这条规则对我们系统的影响

1.冷启动状态下,没有设置系统保护规则的场景

在没有配置如上规则的情况下,即便没有被击穿,我们看到,在冷启动的状态下,系统大概需要5-7分钟的时间来让系统从“准崩溃状态”中恢复回来,如下是CPU监控视图(大概6分钟左右处于高负载的CPU状态下,一旦恢复回来,CPU仅在30-40%左右)

压测端在高CPU阶段QPS上不去,仅在50-100之间波动,CPU恢复之后,QPS迅速上涨到400,整个过程Sentinel无熔断发生

2.热启动状态下,没有设置系统保护规则:

在热启动状态下,我们在上面压测完一轮之后再压测一轮,我们可以看到这个时候系统就没有一个“预热过程”的“准崩溃状态”了

3.冷启动状态下,设置系统保护规则

我们再压测一下冷启动状态下设置系统保护规则的情况(压测前重新启动一下Java进程,让应用处于“冷启动”的状态),看如下监控图,只要系统不进入“准崩溃状态”,那么系统会很快就恢复到正常状态,从下面图上看冷启动下对系统的影响只有前一分钟

如下是压测端视图

如下是CPU的情况

如下是Sentinel熔断情况,有1分钟左右有熔断发生

4.冷启动性能差之谜

冷启动过程性能比较慢,主要是有几方面因素导致:

1)HotSpot JVM优化:热点监测JVM会在程序运行期间不断对代码进行不同级别的优化,高频执行代码会被JIT Compiler优化到最佳的状态,而在冷启动开始运行的时候,代码还处于原始状态,性能相对会差

2)资源就绪情况:譬如一些线程池在开始运行之后才会被创建,或者程序中有一些连接是在启动之后才会开始建立

3)崩溃循环:当CPU升高之后,线程切换等操作本身可能会导致CPU更高,从而让系统螺旋式进入一种越来越糟糕的状态,直到达到一个平衡点,而上面的1)和2)随着运行的优化会在达到平衡点之后打破平衡点,螺旋式下降让系统恢复到比较好的状态,但最糟糕的情况是达不到平衡点系统直接崩溃无法恢复

四、题外话

这个问题不仅仅出现在Serverless冷扩,如果有一天,你发现请求量暴涨负载过高,于是你扩容了机器,然后你接入了流量,哐当,被打崩了…这个场景是不是太过惨淡了

作者:京东零售 吴毓群

内容来源:京东云开发者社区

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能AI 计算平台介绍

人工智能AI计算平台介绍 产品及服务: 标准模块开源 核心模块及服务收费 资源齐全 服务支持 产品使用者: 自行扩充组件 快速二次开发 轻松搭建企业级 数据挖掘应用 自…

linux0.12-10-1-总体功能

第10章 字符设备驱动程序 [466页] 10-1 总体功能 本章的程序可分成三部分: 第一部分是是关于RS-232串行线路驱动程序,包括程序rs_io.s和serial.c; 第二部分是涉及控制台的驱动程序,包括键盘中断驱动程序keyboard.S和控制台显示驱动程序con…

人工智能AI会话+文字转为markdown格式/思维导图的工具的介绍和使用

AI会话工具和文字转换为markdown格式 1、这里首先要有一个xmind思维导图软件,下载链接在下方。XMind: 2、本章中列举的AI工具是近期国内交火的prompt(文心一言 作者还没排上队) https://chat.givemeprompt.com/3、首先运用此工具生成你想要的…

leetcode刷题之数组问题总结,二分法,移除元素,

目录 一、二分查找相关应用704.二分查找35.搜索插入位置方法一:二分法暴力解法 34.在排序数组中查找元素的开始位置和最后一个位置方法一:暴力解法方法二:二分法,确定左右两侧的边界 69.x的平方根方法一:二分法方法二:暴力解法错解…

k8s1.26.1部署 ingress-nginx-controller(1.6.4)

文章目录 参考ingress-nginx git地址ingress-nginx 的 deployment的地址: 参考 1.24版本k8s集群配置Nginx-Ingressrancher配置https域名访问图文教程 ingress-nginx git地址 https://github.com/kubernetes/ingress-nginx ingress-nginx 的 deployment的地址&a…

cdn配置(超详细+图解+原理)

具体的详细配置在右侧目录翻到“三”,前面的一二是将原理 以腾讯云的cdn为例,其它家的大同小异 一、cdn作用和配置思路 (一)cdn作用 1.加速访问 cdn服务通常有多个节点缓存,用户可以就近获取,延迟较低 …

得物App万米高空WiFi拦截记

0.前情摘要 在一次飞行途中,我司客户遭遇到了得物App在飞机上的WiFi网络访问异常的问题。这让我们意识到在特定场景下,用户可能面临无法使用得物App的困扰。经过SRE团队与无线团队、网络团队联合全力排查与优化,最终成功解决了这一问题&…

PAN(Pyramid Attention Network for semantic segmentation)paper解读

Pyramid Attention Network for Semantic Segmentation讲PAN用于语义分割,网络结构类似encoder-decode, u-shape。 背景 encoder-decoder结构, 在encoding到高维度特征的过程中,原始的纹理信息会遭遇空间分辨率损失,例如FCN。 P…

Spring Boot进阶(39):SpringBoot之Jackson配置全局时间日期格式 | 超级详细,建议收藏

1. 前言🔥 不知道小伙伴对于日期字段,在项目中都是如何处理的,是单独给每个字段都自定义日期格式还是做全局格式设置?这个我之前啊,是对日期都是有做单独配置,给每个Entity带有日期字段的都配JsonFormat注解…

SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

编译器设计(十四)——寄存器分配

文章目录 一、简介二、背景问题2.1 内存与寄存器2.2 分配与指派2.3 寄存器类别 三、局部寄存器分配和指派3.1 自顶向下的局部寄存器分配3.2 自底向上的局部寄存器分配3.3 超越单个程序块 四、全局寄存器分配和指派4.1 了解图着色4.2 找到全局活跃范围4.3 估算全局逐出代价4.4 冲…

前端列表页+element-puls实现列表数据弹窗功能

效果图: 这是一个修改的弹窗,我们要实现的功能是,在列表,点击修改按钮时,将数据带入到弹窗里面,点击保存时关闭弹窗。 1,点击修改展开弹窗 使用 eldialog组件,v-model绑定的值为tru…

fluent-operator在kubesphere中的实战详解

前言 最近收到一个小任务:熟悉kubesphere实现一个日志平台。基于这样的机会,将最近所整理的笔记进行汇总。 kubesphere开启日志收集 根据官网介绍只需要将 enabled 的 false 改为 true即可 执行kubectl get pod -n kubesphere-logging-system命令来检查…

QT课程 QT介绍

QT介绍(了解) Qt是一个基于C开发语言的图形用户界面开发(GUI)框架。界面开发知识Qt的一部分,实际上Qt也可以支持很多其他的功能,比如:网络编程、文件IO、图形图像处理等。 Qt在嵌入式领域最大…

Vue之插值表达式,v-bind(单向绑定),v-model(双向绑定)

文章目录 前言一、插值表达式二、v-bind指令三、v-model指令总结 前言 插值表达式{{…}} v-bind v-model 一、插值表达式 插值表达式支持匿名变量、三目运算符、四则运算符、比较运算符、数值类型的一些内置方法&#xff0c;还有数组的索引取值方法和对象属性。 <!DOCTYPE…

安全工具 | CMSeeK [指纹识别]

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

2023年北京.NET线下技术沙龙圆满落幕!

5月20日&#xff0c;MASA技术团队在北京举办的“2023年北京.NET线下技术沙龙”圆满落幕&#xff01;整个活动气氛热烈&#xff0c;嘉宾们的分享内容丰富多彩&#xff0c;现场观众都受益匪浅。我们期待着更多这样的技术交流活动&#xff0c;让.NET社区不断发展和进步。 本次活动…

材料电磁参数综合测试解决方案 材料吸波、屏蔽性能测试系统 (10MHz~500GHz)

材料吸波、屏蔽性能测试系统测试频率范围可达10MHz&#xff5e;500GHz&#xff0c;可实现材料反射率、屏蔽性能特性参数测试。系统由矢量网络分析仪、测试夹具、系统软件等组成&#xff0c;根据用户不同频率、材料性能测试需求&#xff0c;可选用弓形框法、便携式反射率测试法进…

如何快速实现接口自动化测试,常规接口断言封装实践

目录 前言&#xff1a; 一、框架设计思路 1. 封装请求方法 2. 断言封装 3. 接口封装 4. 接口统一管理 二、框架使用 三、总结 前言&#xff1a; 在当今互联网行业中&#xff0c;接口自动化测试已经成为了非常重要的测试手段之一。而在这个过程中&#xff0c;接口自动化…

3年外包裸辞,面试阿里、字节全都一面挂,哭死.....

测试员可以先在外包积累经验&#xff0c;以后去大厂就很容易&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓今年今天履历只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大…