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



推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
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社区 版权所有