热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

性能测试之性能优化篇

目录为什么进行性能测试性能测试的目的服务性能优化的思考衡量系统性能常用的指标系统性能计数器性能测试分类如何合理的规划我们的架构性能最后拿数据说话性能优化原则性能优化的方法性能优化的

目录





      • 为什么进行性能测试

      • 性能测试的目的

      • 服务性能优化的思考

      • 衡量系统性能常用的指标

      • 系统性能计数器

      • 性能测试分类

      • 如何合理的规划我们的架构性能

      • 最后拿数据说话

      • 性能优化原则

      • 性能优化的方法

      • 性能优化的分层思想,所有的优化都会对系统性能产生影响

      • 软件性能优化的三板斧,这些虽然很有用,但不能太依赖

      • 最后



为什么进行性能测试

系统上线必会经历测试阶段,功能测试我们可以按照产品的设计原型去执行一条条测试用例来覆盖产品功能点。但是在功能测试之外,如果一个用户接口层服务,我们还需要知道服务的性能指标以了解并评估这个服务在实际的生产环境中可以应对多大压力,我们可以根据这个数据情况根据不用的场景时间去对应的增加机器节点或进行重构系统。


性能测试的目的

我们进行性能测试的目的是想真实的了解服务的性能,这个测试可能是一个单机的压力测试,可能服务链路比较简单,单体服务就支撑了整个访问请求。也可以是一套全链路的性能压力测试,例如从用户到下单到购买一件商品,到底是哪个节点性能较差,其中可能涉及很长的一套分布式微服务架构。例如淘宝最先实施的全链路压测就是为了达到这样的目的,才有了后来历届双十一的平稳进行。


服务性能优化的思考

我们怎么才能增加服务的性能呢?增加服务器的数量就可以增大服务器的性能吗?作为一个架构师,我们该如何解释给老板让他同意我们的架构优化方案呢?性能好了用户体验就一定好吗? 用新的技术就一定能优化架构吗? …

其实关于事物都有很多方面,关于性能体现也一样。分为主观视角和客观视角。主观视角比如站在用户的角度,我们的服务性能已经到了极致了,也没有任何传输损耗,但是客户端在中国,服务端在美国,只是光速传播的速度30ms已经消耗了掉了,单纯这个链路方式我们已经没有任何优化手断了。如果这时候我们给用户返回一个友好的提示,这样用户体验就会很好了。再比如,我们从网站下载一个东西,如果只是单纯的一个正在下载中的提示,那么用户会各种心理去怀疑你的服务或是网络,但是我们给用户一个进度条,用户就可以很清楚的了解到当前的一个具体情况,用户的心理被得到了重视,用户体验感就会很好。那么站在客观角度去衡量一个软件,就是我们该关心的服务性能问题了,我们会有各种指标去跟踪链路的请求耗时长短,所以我们拿到这些指标数据才能去真正的去做一个系统的性能优化,是否可以去增加机器数量。综合以上两个因素,我们就可以拿到一份实在的报告去给老板说,我们的系统需要优化重构了。


衡量系统性能常用的指标



  • 响应时间

  • 并发数

  • 吞吐量

    这三者之间也是存在一定关系的,知道其中两者其实可以推算出第三个了。



系统性能计数器

但是当并发数超过一定限制之后,会无限制的占用系统资源,导致响应时间无限大,吞吐量为0。这时候系统就要崩溃了。这时候又有一个重要的指标,就是性能计数器。



  • 性能计数器

    linux系统我们通过top查看系统的性能资源使用情况,system load表示当前系统cpu的负载,其中我们可以查看 load avg看cpu的负载情况,它表示当前cpu中正在处理的线程数+等待处理的线程数。

    图中三个值分别代表5分钟、10分钟、15分钟当前系统的load 均值,图中我的电脑为双核,这代表已经超负荷执行了。这个loda多大合理呢,理想情况下是系统cpu的核数;如大大于,说明过载了;如果过小,说明负载不足;



性能测试分类

性能测试是一个总称,具体细分可以分为性能测试,负载测试,压力测试和稳定性测试。



  • 性能测试

  • 负载测试

  • 压力测试

  • 稳定性测试


如何合理的规划我们的架构性能

响应时间和tps这两条曲线是对应的。

这是一个系统性能测试的运行情况,我们可以拿做参考,作为一个系统的架构师绝不能让你的系统一直在c点运行,一直在b点左右是最理想的情况,但是如果超过c点你的系统很可能就要崩溃了。那么到底是在b点上还是下呢,选择更安全还是更经济,这就取决你Trade-Off了。


最后拿数据说话

了解了性能测试的一些操作,我们可以得到系统优化前后的一些数据对比,这时候去和你的leader去汇报业绩或是要资源,一切就显得那么顺理成章了。我们可以向如上图一样根据数据绘制出优化前后的对比图,让你的工作更有分量。

压力测试指标。

性能优化前后数据对比。

这样的图我们可以用excel等等都能很简单的自动绘制。有了直观的证明,一切都不言而喻。


性能优化原则

我们优化一个系统的性能一切都需要根据原则。我觉得两点很重要,



  • 一、你不拿优化一个没有经过测试的软件

  • 二、你不能优化一个你不了解的软件

    不能有了牛逼的技术就去想优化一个架构这是不正确的,一切都得根据实际情况来说,有了数据你才能去说好或是不好。


性能优化的方法



  1. 性能测试,获得性能指标

  2. 指标分析,发现性能与资源瓶颈点

  3. 架构与代码分析,寻找性能与资源瓶颈的关键所在

  4. 架构与代码优化,优化关键技术点,平衡资源利用

  5. 性能测试,进行性能优化闭环


性能优化的分层思想,所有的优化都会对系统性能产生影响



软件性能优化的三板斧,这些虽然很有用,但不能太依赖



  • 缓存

    缓存主要优化读操作。从内存获取数据,减少响应时间,减少数据库访问,降低存储设备负责压力,缓存结果对象,而不是原始数据,减少cpu计算等。



  • 异步

    使用异步可以做到即时响应,更好的用户体验,控制消费的速度,获得合适的负责压力,异步主要优化的就是写操作。



-集群

互联网技术的发展路径就是,更多的用户访问需要消耗更多的计算资源,单一的服务器计算资源是有极限的,所以需要增加更多的服务器。集群的目标只有一个,就是如何使用多台服务器对使用者而言看起来像一台服务器。


最后

最后,值得强调一点,软件的性能优化,我们不要一上来就想多线程、缓存等,这会限制我们的技术发展,很多时候软件性能不好,仅仅是因为你的代码太烂了。写清晰的代码,保证架构的整洁,这是很重要的。

本文地址:https://blog.csdn.net/weiyi_world/article/details/107515250



推荐阅读
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 《软件测试精要》深度解析与实战经验分享
    《软件测试精要》深度解析与实战经验分享,系统梳理了软件测试的核心概念与关键原则,结合实际项目中的测试经验和教训,详细探讨了测试分类、测试权衡要素、测试效率、测试覆盖率以及测试框架的引入和用例设计等内容,为读者提供了全面而实用的指导。 ... [详细]
  • [转帖] 学习一下 apache bench 的总结简介 ( LAMP的没用过..)
    PS:网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的 ... [详细]
  • APP及其接口测试全面解析
    本文深入探讨了移动应用(APP)及其接口测试的关键点,包括安装与卸载、功能一致性、系统兼容性、权限管理等多个方面的测试策略,以及针对接口的功能、边界值、参数组合等专业测试方法。同时,介绍了几款常用的测试工具,帮助开发者提高测试效率和质量。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 阿里面试题解析:分库分表后的无限扩容瓶颈与解决方案
    本文探讨了在分布式系统中,分库分表后的无限扩容问题及其解决方案。通过分析不同阶段的服务架构演变,提出了单元化作为解决数据库连接数过多的有效方法。 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
author-avatar
mmakarlen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有