热门标签 | 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



推荐阅读
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
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社区 版权所有