首页 > 其他分享 >记一次618军演压测TPS上不去排查及优化

记一次618军演压测TPS上不去排查及优化

时间:2023-06-05 10:11:55浏览次数:45  
标签:618 军演 压测 接口 排查 TPS 内存 JVM

本文内容主要介绍,618医药供应链质量组一次军演压测发现的问题及排查优化过程。旨在给大家借鉴参考。

背景

本次军演压测背景是,2B业务线及多个业务侧共同和B中台联合军演。

现象

当压测商品卡片接口的时候,cpu达到10%,TPS只有240不满足预期指标,但是TP99已经达到了1422ms。

排查

对于这种TPS不满足预期目标,但是TP99又超高,其实它的原因有很多中可能,通过之前写过的文章对性能瓶颈的一个分析方式《性能测试监控指标及分析调优》,我们可以采用自下而上的策略去进行排查:

首先是操作系统层面的CPU、内存、网络带宽等,对于集团内部的压测,机器的配置、网络带宽,这些因素运维人员已经配置到最优的程度了,无需我们再关心是否是因为硬件资源系统层面导致的因素。

接下来从代码层面和JVM层面进行排查,可能是项目代码中出现了线程阻塞,导致线程出现等待,响应时间变长,请求不能及时打到被测服务器上。对于这种猜测,我们可以在压测过程中打线程dump文件,从dump文件中找到哪个线程一致处于等待状态,从而找到对应的代码,查看是否可以进行优化。这块同开发一同分析整个接口的调用链路,商品卡片接口调用运营端的优惠券的可领可用接口,通过查看此接口的ump监控那个,发现调用量其实并不高。接下来通过查看运营端机器的日志发现,调用可领可用优惠券接口已经超时了,并且机器CPU已经偏高,使用率平均在80%以上。是什么原因导致调用可领可用接口大量超时,成为了问题的关键点。

image.png

首先我们代码层面分析,这个可领可用优惠券接口还会调用一个过滤器进行过滤,于是猜测是不是这个过滤器接口把CPU打满了,但是通过监控过滤器接口的ump中可以看到它的TP99并不是很高,说明它的调用量没有上去,这种猜测可能不成立。还好当时代码这设置了一个开关是否使用过滤器,我们把过滤器的开关关闭后。再次进行压测商品卡片接口,发现还是没有解决问题,TPS仍然不高,并且TP99还是很高。说明这个猜测真是不成立的。

接下来我们转换思路,查看JVM日志,是否从中寻找到一些蛛丝马迹,果然从JVM的GC日志中可看到Ygc和Fgc的时间占用比较长,其中Fullgc的时间占用时间达到了7165ms,并且从中可以查看jvm的参数配置,发现Xms 和Xmx配置的值都是1024,只有1个G。问题的原因找到了,这台被压测的机器JVM参数配置的Xms 和Xmx值太小了,如果-Xmx指定偏小,应用可能会导致java.lang.OutOfMemory错误

image.png

image.png

对于JVM的介绍这部分比较庞大涉及到类加载方式、JVM内存模型、垃圾回收算法、垃圾收集器类型、GC日志,在这就不做详细说明了,想要了解详细内容可以看看《深入理解 JAVA 虚拟机》这本书。

此处简单说明下什么是Ygc和Fgc,以及Xms、Xmx的含义。

JVM内存模型中,分为新生代、老年代和元空间,新生代又分为eden区、Survivor0、Survivor1区。对象优先在Eden区分配,当Eden区没有足够空间时会进行一次Minor GC,执行完第一次MGC之后,存活的对象会被移动到Survivor(from)分区,当Survivor区存储满了之后会进行一次Ygc,但是Ygc一般不会影响应用。当老年代内存不足的时候,会进行一次Full GC,也就是Stop the world,系统将停止运行,清理整个内存堆(包括新生代和老年代) ,FullGC频率过大和时间过长,会严重影响系统的运行。

Xms,JVM初始分配的堆内存

Xmx,JVM最大分配的堆内存

一般情况这两个参数配置的值是相等的,以避免在每次GC 后堆内存重新进行分配。

优化

最后修改机器的JVM数配置

查看JVM配置参数

重启后再次进行压测,我们的TPS指标上来了,并且TP99的值也下去了。达到了预期的一个目标。

总结

其实对于一个性能瓶颈问题的分析排查定位,犹如医生看病,需要望闻问切,通过表面现象逐层的去排除一种种的可能性,最终找到其根本原因,对症下药解决问题。本文介绍的也只是性能瓶颈问题中的一个小小的部分,其实在压测过程中还会遇到各种各样的问题,但是我们掌握了方法论,其实都可以按照相同的思路去排查,最终找到根源。

作者:京东健康 牛金亮

来源:京东云开发者社区

标签:618,军演,压测,接口,排查,TPS,内存,JVM
From: https://www.cnblogs.com/jingdongkeji/p/17457117.html

相关文章

  • haproxy vegeta压测https
     echo"GEThttps://mail.test.com/EWS/Exchange.asmx"|vegetaattack-rate=300-duration=300s-timeout=300s|teeresults.bin|vegetareport如果提示证书不受信任,则将其域名根证书(.cer)放到放到/etc/pki/ca-trust/source/anchors目录下然后运行/bin/update-ca-trust......
  • 码住!CRMEB 618最全省钱攻略,高能宠粉时刻来啦!
    当~当~当~当~......
  • 【小实验】使用 wrk 的 docker 容器来压测另一个容器
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯想压测容器环境的服务性能,发现两个麻烦:本地使用wrk,由于本地网络和容器服务器很远,压测效果不好;wrk找不到一个独立的二进制版本可以下载;go-wrk完全不可用。然后......
  • 【grpc】记一次jmeter压测响应超时分析
    一、场景  由于jmeter测试时,接口存在超时问题,所以就需要分析超时的原因 二、抓包我们需要把分析数据抓下来->%sudotcpdump-ieth0host192.168.3.123andport6788-wcapture.pcaptcpdump:listeningoneth0,link-typeEN10MB(Ethernet),capturesize2621......
  • jmeter压测rabbitMQ
    一、安装RabbitMQ测试插件这个插件需要编译1.安装ant环境,配置环境变量下载地址:https://dlcdn.apache.org//ant/binaries/apache-ant-1.9.16-bin.zip下载解压即可用,记得配置下环境变量 Pathcmd直接运行ant,如下表示配置ok2、AMQP源码下载并打包下载地址:https://github.com......
  • Python异步编程之web框架 异步vs同步 文件IO任务压测对比
    测试基本信息主题:比较异步框架和同步框架在文件IO操作的性能差异python版本:python3.8压测工具:locustweb框架:同步:flask异步:aiohttp、starlette异步文件模块:aiofiles、anyio.Path请求并发量:模拟10个用户服务器配置:Intel(R)i7-12700F客户端配置:Intel(R)i7-87003......
  • MATLAB实验一:一维寻优法(0.618法)程序设计
    一、实验目的通过一维寻优黄金分割法的程序设计,培养计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。二、实验内容(1)用0.618法求解优化问题:minf(x)=x^2-sin(x)在区间[0,1]上的极小点和极小值;(2)根据0.618法算法步骤编写Matlab的程......
  • 开发者们:618电商团战即将开启,“抢流量”想上分,必备这三个大招 | MobTech观察
    最卷的一届“618”大促即将来袭。5月23日晚间开始,各平台陆续对外启动预售。在消费领域加速复苏,全国各地迎来“拼经济”热潮的背景下,各平台纷纷对外喊话,将打造“史上投入最大”的一届“618”。电商平台们想借年中大促漂漂亮亮地打一场“翻身仗”,却发现这场仗并不好打。据万得(Wind)数......
  • 618网购盛宴即将开启,云联络中心+AI成为电商的“新基建”
    科技云报道原创。618大战未启,烽烟已经弥漫。作为全民网购盛宴,618如今已成为各大平台的“必争之日”。不仅天猫、京东、苏宁易购等老牌电商巨头积极备战,电商新秀拼多多也宣布,将加码百亿补贴开展促销。与此同时,抖音、快手等短视频直播也成为“带货”的新主力,今年的618势必将群雄......
  • Serverless冷扩机器在压测中被击穿问题
    一、现象回顾在今天ForceBot全链路压测中,有位同事负责的服务做Serverless扩容(负载达到50%之后自动扩容并上线接入流量)中,发现新扩容的机器被击穿,监控如下(关注2:40-3:15时间段的数据),我们可以看到,超高CPU,频繁FullGC,并且每次FullGC之后对内存并不回收(见FullGC时间段对应的堆内存的曲......