性能测试常见瓶颈分析及调优方法总结

简介: 性能测试常见瓶颈分析及调优方法总结

01

引言


在软件开发过程中,性能测试是至关重要的一个环节


在完成开发之后,对系统进行性能测试可以帮助发现系统存在的性能问题从而及时进行优化提高系统的响应速度、吞吐量、并发性等指标



性能测试瓶颈分析及调优方案是性能测试的重要步骤之一,下面我们将详细介绍其步骤和方案。


如今谈起http协议,想必IT人都懂,无论基于Web端还是App端应用、游戏开发等领域,应用非常广泛。



如何才能让http协议让不懂计算机的人也能明白它的重要性?


这个案例主要讲解如何通过http协议的细节来判断cookie、session、会话保持等相关知识点。

02

一、内容简介


在此先大概介绍下整个请求链路JMeter→nginx集群→k8s集群(应用服务部署在容器里,2个pod分别在不同的node上)→数据库接口使用的是http协议

03

二、寻找问题的本质根源


果在压测过程中发现所有的请求只打1个pod中,这个pod的资源利用率达到80%以上,而另外一个pod无压力,通过查看应用日志,发现没有任何请求打到这个pod上,判断是负载不均衡带来的问题

04

三、分析定位问题


根据应用的请求链路信息,通常看到这个现象脑海里想到的第一个想法首先是查看k8s的负载均衡策略,这里简单介绍一下,目前kubernetes提供了两种负载分发策略:


①如果不定义,默认使用kube-proxy的策略,比如随机、轮询


②基于客户端地址的会话保持模式,即来自同一个客户端发起的所有请求都会转发到固定的一个Pod上。



通过查看service的yaml配置,发现service没有配任何IPVS的分发策略

细想还会是什么原因影响请求的转发呢?



大胆假设很可能是另外一个pod所在的node设置网络策略比如限速等引起的,这可以通过最简单的方式进行快速验证,即将pod驱逐到其它node上进行验证可惜的是问题并没有解决。


由此证明此问题不是k8s和node引起的



通过前面的链路判断,只能再往前分析前一个组件了,即nginx集群配置负载均衡策略导致。


Nginx常见的负载均衡策略有,随机、轮询、ip_hash、weight等,其中可能会引起负载不均衡的有ip_hash和weight



通常在企业内,测试并没有很高的权限,而且每个组件都会有对应的负责人,想到这只能联系nginx的负责人帮忙查看了,很遗憾获得的回馈是nginx配置是轮询策略,也就是不是nginx配置引起的



再往前思考一步莫非是JMeter了,但是这次压测使用了5台不同的压力机进行发压,即使有1台压力机有问题,也不会引起后端服务负载不均衡。


此时我已无策可施,下面只能考虑应用层相关配置引起的问题,一层层深入分析


从协议的角度来看,常见的有四层负载均衡和七层负载均衡,这次的应用使用的是七层负载均衡



由于缺乏对http协议的深度理解,大脑中只知道接口协议包含哪些内容如请求头、响应头、cookie、session、URL、地址、参数等信息,实在想不出哪里会导致后端负载不均衡。

05

四、寻找问题解决方案


时和开发还有k8s的负责人,大家在一起讨论原因,开发预估是配置session会话保持引起的


次阐述,会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关联性,负载均衡的同时还保证一系列相关联的访问请求都会分配到一台机器上。



再次查看应用层的确开启了session会话保持功能


如果仅开启session保持这个功能并不会引起负载不均衡问题



因为JMeter使用了不同的压力机,后来通过分析可能是JMeter脚本参数化数据问题,结果发现Cookie中将jsessionid给写成唯一值了,这就导致了所有的请求都只会到同一台服务器上。

06

五、解决问题


最后我通过模拟不同的jssessionid解决了此问题。

07

六、结

 

综上所述,通过这次性能测试案例分析与调优。


从中获得了一些心得与感悟,要实施好性能测试,不但需要一定的知识的深度与广度,而且要让性能测试人员站在一定的高度才能快速分析出问题的瓶颈



后需要开发配合一起排查解决问题,才能从根本上提升系统的性能,满足性能测试需求目标。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
8天前
|
测试技术 数据安全/隐私保护
深入理解与应用软件测试中的边界值分析法
【4月更文挑战第23天】在软件测试的诸多技术中,边界值分析法因其简洁性和高效性而备受青睐。本文旨在探讨边界值分析法的核心原理及其在实际测试场景中的应用。通过对边界条件进行系统的识别、分类和测试,该方法能够有效地发现软件缺陷。我们将详细讨论如何确定边界值,设计测试用例,以及如何处理复杂数据类型的边界情况。此外,文章还将展示通过案例研究来验证边界值分析法在提升测试覆盖率和发现潜在错误方面的实际效益。
|
9天前
|
Java
IDEA快捷测试方法可用性
IDEA快捷测试方法可用性
16 0
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
6天前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
13 1
|
2月前
|
jenkins 测试技术 持续交付
提升软件测试效率与准确性的策略分析
【2月更文挑战第28天】 在快速迭代的软件发展周期中,高效的测试流程是确保产品质量和用户满意度的关键。本文旨在探讨提高软件测试效率和准确性的策略,包括自动化测试工具的选择、测试用例的优化设计以及持续集成的实践。通过分析当前软件测试领域面临的挑战,提出了相应的解决方案,并通过案例分析来展示这些策略的实际应用效果。文章的目的是为软件测试工程师提供实用的指导和参考,帮助他们在保证测试质量的同时,缩短测试周期,降低成本。
48 1
|
1天前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
2天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成技术
【4月更文挑战第29天】随着人工智能技术的不断发展,其在软件测试领域的应用也越来越广泛。本文主要探讨了AI驱动的测试用例生成技术在自动化测试中的应用,以及其对提高测试效率和质量的影响。通过对现有技术的深入分析和实例演示,我们展示了AI如何通过学习和理解软件行为来自动生成有效的测试用例,从而减少人工编写测试用例的工作量,提高测试覆盖率,降低错误检测的成本。
|
7天前
|
API 开发者
免费邮箱API发送邮件测试调试的方法和步骤
本文介绍了使用免费邮箱API如aoksend、Mailgun、SMTP2GO发送邮件的测试调试步骤:选择合适的API,获取访问密钥,配置邮件参数,编写测试代码,调试和测试,查看发送日志,以及优化改进邮件发送功能,确保其稳定运行。
|
8天前
|
缓存 C语言 C++
【项目日记(九)】项目整体测试,优化以及缺陷分析
【项目日记(九)】项目整体测试,优化以及缺陷分析
|
8天前
|
XML 测试技术 数据库
深入理解自动化测试中的数据驱动方法
【4月更文挑战第23天】 在软件测试领域,为了提高测试效率和质量,自动化测试已成为不可或缺的实践。数据驱动测试(DDT)作为一种高效的自动化测试策略,它通过将测试逻辑与测试数据分离,允许测试人员以更灵活、可维护的方式设计用例。本文将探讨数据驱动方法的基本原理,实现方式以及在实际项目中的应用案例,旨在帮助读者深入理解并有效运用数据驱动方法来提升自动化测试的效率和质量。

热门文章

最新文章