首页 > 其他分享 >Serverless冷扩机器在压测中被击穿问题

Serverless冷扩机器在压测中被击穿问题

时间:2023-05-23 10:33:04浏览次数:49  
标签:Serverless 状态 压测 系统 冷扩 FullGC 冷启动 CPU

一、现象回顾

在今天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冷扩,如果有一天,你发现请求量暴涨负载过高,于是你扩容了机器,然后你接入了流量,哐当,被打崩了......这个场景是不是太过惨淡了

作者:京东零售 吴毓群

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

标签:Serverless,状态,压测,系统,冷扩,FullGC,冷启动,CPU
From: https://www.cnblogs.com/Jcloud/p/17422574.html

相关文章

  • @广州 智在粤港澳,Serverless 为创新提速
    风从海上来,潮涌大湾区。粤港澳大湾区建设再加速,云计算、人工智能等前沿科技持续激发产业潜能,催生产业全面迈向智能化。阿里云峰会·粤港澳大湾区,将为您呈现一幅科技创新新图景。云Serverless加速云上开发,用AI新范式见证数智化变革,激发想象力。本次峰会分为一场主论坛、13场分......
  • 微盟全链路压测:如何帮助电商业务实现 10 倍性能提升?
    一分钟精华速览全链路压测之所以被誉为电商大促备战的“核武器”,是因为它基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,能真实反映系统的状况,对系统风险和瓶颈真正做到心中有数。微盟作为电商SaaS的龙头企业,支撑着数十万中小电商企业的经......
  • 上海丨阿里云 Serverless 技术实战营邀你来玩!
    活动简介本次沙龙深度探讨“Serverless在中国企业的落地和开发者实操”主题,我们特别邀请了来自阿里云一线技术专家,分享当前Serverless趋势和落地实践过程中的挑战和机遇;带来数据库Serverless技术架构及应用实践;浅析云原生时代开发者需要的Serverless能力,为开发者日常......
  • Jmeter部署到Linux实现分发压测时,controller机器回收测试报告时卡死
    问题检查与定位:检查slave-A和slave-B两台执行机,执行机已经finished,无报错,说明执行机已完成测试任务采集到的日志批量分析后得出的结论:在完成并发测试后,vuser要进行释放,由于没有完全释放导致controller机器一直等待(像卡死),而实际上是等待,问题定位后,进行检查发现:问题1: reportge......
  • linux-cmd-iperf网络压测
    网络压测yuminstalliperf#开启server端10.0.0.1iperf-s-i2#开启client端10.0.0.2iperf-c10.0.0.1-i2实例演示#server[root@zuiyoujie01tools]iperf-s-i2------------------------------------------------------------ServerlisteningonTC......
  • 【换模型更简单】如何用 Serverless 一键部署 Stable Diffusion?
    作者:寒斜本篇章是阿里云函数计算部署StableDiffusion系列的第三篇,如果说第一篇是尝试使用云服务来解决用户本地部署Stable Diffusion的问题(显卡成本,部署技术复杂),第二篇是面向技术同学解决云服务Stable Diffusion的实用性问题(自定义模型,扩展),那么本篇则是以更大众的方式实现......
  • 通过Serverless私有化部署ChatGPT Web
    作为开发人员,想要自己部署一个渠道访问或是想随时访问但是奈何魔法有限,又或是海外服务器太贵,不想耗费这个钱,本文借助Serverless来搭建一下私有ChatGPT服务,Serverless按照使用量来计费,个人使用下(满足工作和生活)费用相当低。本文过程较为繁琐,也有更为简便的其他方式:https:......
  • 如何用 Serverless 一键部署 Stable Diffusion?
    思路其实很简单,我们只需要将镜像里面的动态路径映射到NAS文件存储里面即可,利用NAS独立存储文件模型,扩展,语言包等,并且我们可以为管理NAS单独配置一个可视化的后台,用简单的文件上传删除的方式管理我们的文件,为此我们需要展开打镜像的脚本,为了完成全套的流程我们接下来盘一下......
  • WM_大促之前的全链路压测监控篇(下)后面包含skywalking 细节 一般有用 看1
    大促之前全链路压监控篇1.skywalking服务监控1.1skywalking简介Skywalking是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计它通过探针自动收集所需的指标,并进行分布式追踪,通过这些调用链路以及指标,SkywalkingAPM会感知应用间关系和服务间关系,并进行相应......
  • 【自己更换模型】如何用 Serverless 一键部署 Stable Diffusion?
    作者:寒斜上一篇讲了如何使用ServerlessDevs和函数计算快速体验部署StableDiffusion,本篇继续聊聊如何解决动态模型加载的问题,从玩起来到用起来。思路其实很简单,我们只需要将镜像里面的动态路径映射到NAS[1]文件存储里面即可,利用NAS独立存储文件模型,扩展,语言包等,并且......