记一次性能压测

简介: 水平扩容无法增加集群QPS的一个疑难杂症的排查。

测试团队遇到一个难题:某应用性能压测,在水平扩容后,集群TPS并没有增加。希望排查下具体原因。

症状表现如下:

应用机器为1C1G,k8s负责管理。测试同学在做性能压测时,发现 4副本和10副本的集群总TPS变化不大。

首先对压测方案进行了重新设计:

机型先调整为4C8G。
单副本压测,看瓶颈。
调整机型,再压基线。
集群压测。
数据如下:

单进程、单副本: RT 111ms, TPS 9,CPU占用 2.7C,内存 200M。
双进程、单副本: RT 117ms, TPS 16,CPU占用4.2C,内存300M。
5进程、单副本:RT 169ms,TPS 27,CPU占用5.03C,内存777M。
10进程、单副本:RT 600ms,TPS 15, CPU占用2.76C,内存885M。
6进程、单副本:RT 190ms,TPS 27,CPU占用5.2C,内存910M。
初步分析如下:

因为k8s中设置了动态CPU调整,超出4C时,会动态分配空闲的CPU,所以CPU超出实际要求部分是正常的。内存看起来不是瓶颈,CPU是瓶颈,符合算法服务应用的特性。在10进程的压测结果中,CPU占用下降,TPS 下降,RT上升较多,看起来压力没有传导到实际的应用副本上。从3和5的测试来看,已经是单副本当前性能的极限。所以做以下调整,机型调整为8C8G。

数据如下:

6进程:RT 198ms TPS 30 CPU占用5.3C,内存 819M。
10进程:RT 297ms TPS 33.5 CPU占用5.4C,内存846M。
从结果看,10进程对比6进行没有线性增长。CPU的升配也没有带来性能的进一步提升。做出以下调整:将单副本的线程数由10调整为20。

数据如下:

6进程: RT 192ms TPS 31.8 CPU占用5.2C,内存887M。
可见线程的增加并没有带来显著的提升,应用本身的线程机制也有问题。内存基本无影响,后续不在关注。机型调整为5C2G,单副本的线程数仍改回10。

数据如下:

6进程、单副本:RT 197ms TPS 30 CPU占用5.1C
6进程、双副本:RT 132ms TPS 43.6 CPU占用 <4.5C
12进程、双副本:RT 203ms TPS 60 CPU占用 5C 左右。
60进程、10副本:RT 350ms TPS 172 CPU占用 2C 左右。
从结果可见4中,性能明显下降,猜测可能是网络带宽问题。但是排查了k8s中 ingress (负载均衡)的数据,带宽并没有被打满,而且连接数基本等于压测进程数。开始怀疑是副本所在宿主机的问题。

排查10个副本所在宿主机,发现有4个副本被分配到了两台宿主机(阿里云ECS)上。于是将副本改为8个,保证每个副本都在不同的宿主机上,用之前压测建立的单副本6进程的基线,进行48进程的压测。我们发现 TPS 仍未达到 30 * 8 =240的预期,只有170左右。排查8个副本CPU,发现有数个副本的CPU占用没有到达5C。进一步查看宿主机数据,发现没有达到5C的副本所在的宿主机CPU基本已到了90%以上,基本确定是k8s中CPU超卖导致。

将副本的CPU占用改为独占后,根据实际测试集群空闲CPU的数量,改为 7个副本,压测结果为 RT 200ms , TPS 220 , CPU占用 基本5C左右。该结果符合我们的预期,确定是CPU超卖导致的压测性能下降,后续进入到应用的性能调优阶段。

本文章已使用新华智云 媒体大脑 区块链版权进行保护。

相关文章
|
3月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
418 2
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
452 1
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
643 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
325 2
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
356 4
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
282 1
|
测试技术 Linux
linux 服务器运行jmeter 进行服务性能压测
linux 服务器运行jmeter 进行服务性能压测
1203 0
|
Java 测试技术
用代码模拟调用接口方式压测现网服务器的服务性能
用代码模拟调用接口方式压测现网服务器的服务性能
154 0
|
监控 数据可视化 测试技术
性能测试:性能测试流程与方法
**性能测试流程与方法概述:** 本文介绍了性能测试的关键步骤,包括现状分析、指标获取、用户场景定义、验收标准设定、测试计划编写、压力环境准备、执行压测、监控、结果分析、报告编写及改进建议。测试方法涉及并发模式(虚拟用户)和RPS模式(吞吐量),确保系统在不同负载下的稳定性和效率。