集中式系统把业务处理逻辑程序与数据展示成熟都放在一个程序包中,整个包运行在中间件上(Tomcat,jetty,JBoss等),数据存储在DB(mysql,Oracle等)可能还会用到redis之类的缓存。
web服务+应用服务+DB的结构是很多年前比较经典的结构,我们可以J2EE应用为例来进行分析,如下图所示,常见的J2EE应用架构,一般分为web层(请求接入,负载均衡,页面渲染等),应用层(业务逻辑实现),持久化层(数据记录)
性能测试的诊断方法多种多样,目的是为了识别和解决系统中的性能瓶颈。
如今微服务成了事实上的企业服务架构,微服务解决了服务水平扩展问题,能够支持巨大的负载,对于性能测试来说影响最大的是性能问题的分析路径加深。系统的性能风险分散在多个子服务中,如果没有好的监控工具,我们要剥茧抽丝,有时候可能面对的是一团乱麻,很考验测试人员的耐心。
不管系统结构如何复杂,性能的诊断饭呢西最终还是围绕资源消耗(CPU,内存,磁盘,网络等)来分析,可以说性能分析就是针对主机性能的分析,我们掌握好基础知识,按照分析步骤,积累经验,多数性能问题都是可以顺利解决的。
1>硬件知识(CPU,RAM,Disk,Net等)
2>系统知识(操作系统,linux,Windows)
3>中间件知识(JVM,Tomcat,Jboss,WebLogic,WebSphere等)
4>持久化知识(Mysql,SqlServer,Oracle,DB2,Redis,HBase等)
5>网络知识
6>程序知识,如何让程序更高效。
7>架构知识(如SSH架构,微服务架构)
不过不用担心,现在都是团队协作,大型系统性能问题已经不是一个人所能解决事情;大型系统分工比较详细,由专职人员分别负责某一一部分。
对于性能测试工程师来说,我们首先要做到的是知道监控哪些指标,这些指标反映了什么问题,什么时候去关注这些监控信息。在性能测试执行与分析时你就是总设计师,负责协调这些事情。
使用监控工具实时跟踪CPU使用率、内存占用、磁盘I/O、网络带宽等资源指标。
分析数据库查询时间、锁等待时间、缓存命中率等应用层指标。
检查应用程序、服务器和数据库的日志文件,寻找错误信息或警告,以及执行时间过长的操作记录。
通过日志关联分析,理解用户行为模式和事务流程。
模拟不同的用户负载条件,观察系统在不同压力下的表现。
测试极限负载以了解系统的最大承受能力。
在优化前后对系统进行相同的性能测试,以量化改进效果。
对比同类型系统或组件的性能数据,评估自身系统的相对性能。
手动检查代码质量,寻找可能影响性能的问题,如不必要的循环、低效的算法等。
使用静态分析工具自动检测代码中的潜在问题。
使用性能剖析工具,如Java的JProfiler、Python的cProfile等,来找出消耗时间最长的函数或代码段。
分析调用栈,确定最耗时的路径。
审查SQL查询语句,确保它们是高效的,并且充分利用了索引。
调整数据库配置参数,例如连接池大小、缓存设置等。
使用网络抓包工具(如Wireshark)分析网络流量,查找慢请求或异常通信。
评估网络延迟对整体性能的影响。
根据历史数据预测未来的用户增长和资源需求。
确定是否需要增加硬件资源或调整软件架构以适应预期的增长。
实验性地部署两个或多个版本的应用程序,对比它们的性能表现。
有助于验证新功能或优化措施的效果。
如果在生产环境中进行了更改但导致了性能下降,准备好快速回滚到之前稳定状态的方法。
选择合适的诊断方法取决于具体的环境和技术栈,通常会结合使用多种方法来全面了解系统的性能状况。在诊断过程中,重要的是保持系统化的思维方式,从假设出发,通过实验验证假设,逐步缩小问题范围,最终定位并解决问题。
阅读后若有收获,不吝关注,分享,在看等操作!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。