性能测试后期的性能调优

发布于:2025-02-10 ⋅ 阅读:(39) ⋅ 点赞:(0)

目录

性能调优的常规手段有如下几种。

(1)空间换时间。

(2)时间换空间。

(3)分而治之。

(4)异步处理。

(5)并行。

(6)离用户更近一点。

(7)一切可扩展,业务模块化、服务化(无状态、幂等)、良好的水平扩展能力。

下面将详细探讨一些关键的性能调优策略,并引用相关资料中的细节。

设计优化

算法优化

代码优化

JVM优化

参数优化

数据库优化


高可用性,高可靠性,可扩展性及运维能力是高并发系统的设计要求(当然也要顾及成本)。可扩展性希望服务能力(或者容量)的增长及硬件数量的增长是线性关系。

例如,一台服务器的服务能力是100QPS,增加一台同样的服务器容量应该接近200QPS,这种线性的容量伸缩方式就是常说的水平伸缩。大家最为熟悉的电商(天猫,京东等),网络支付(支付宝,微信等),即时通讯(微信,QQ等)都具备良好的水平扩展能力。以微信朋友圈发红包为例,2016年除夕当日,微信红包的参与人数达到4.2亿人,收发总量达到80.8亿个最高峰为00:06:09,每秒手法40.9万个红包,系统依然稳定运行。

互联网企业现在拼的不仅仅是商业模式,也是在拼技术,性能已经是系统设计首要考虑的问题了。

性能分析及调优旨在帮助客户打造一个高可用,高可靠的系统。性能分析的目的是找出性能瓶颈及风险所在;性能调优就是要用更少的资源提供更好的服务,是效益最大化。

随着业务规模的扩大,传统的单机服务已经不能够满足性能要求。单机性能总有上限(就好比一个人能力再强,也无法完成所有的事情),

于是就出现了集群方案。传统的集群方案后来也不能满足互联网的高并发要求,阿里开展的去IOE(IBM服务器、Oracle 数据库、EMC的专业存储设备)化正是基于成本与性能的考虑。一方面是因为IOE的成本高,另方面是因为成本高还不能满足性能要求,所以分而治之成为必然选择。于是,分布式集群方案开始大行其道,其水平扩展能力是传统架构无法比拟的。围绕分布式主题也诞生了不少分布式的框架与产品(例如 dubbo、dubbox、jd-hydra、memcache/redis),相应的性能分析与调优也面临着调整,不仅要关注单个系统的性能,还要关注整个分布式框架体系下的各组成部分的性能。

多数人都会觉得性能调优是一个高深的话题,但其本质并不复杂。我们可以从很多的生活实例中得到启发。例如一根绳子拉不起重物时,我们可以用多根绳子,这就是集群思想:k车分班次运行,集齐一车人之后才运行一个班次,而不是来一个客人就运行一个班次,这就是批处理。

性能调优的常规手段有如下几种。

(1)空间换时间。

内存缓存就是典型的空间换时间的例子。利用内存缓存从磁盘上取出数据,CPU请求数据时直接从内存中获取,从而获取比从磁盘读取数据更高的效率。

(2)时间换空间。

当空间成为瓶颈时,切分数据并分批次处理,用更少的空间完成任务处理。上传大附件时经常用这种方式。

(3)分而治之。

把任务分开执行,也方便并行执行来提高效率。Hadoop中的HDFSmapreduce 都是应用这个原理。

(4)异步处理。

业务链路上有的任务消耗时间较长,可以拆分业务,甚至使用异步方式减少阻塞影响,这就是我们常说的解耦。常见的异步处理机制有MQ(消息队列),目前在互联网应用中大量使用。

(5)并行。

并行指用多个进程或者线程同时处理业务,缩短业务处理时间。例如,我们在银行办业务时,在排队人数较多时,银行会加开窗口。Spark对数据的分析就可以配置作业并行处理。

(6)离用户更近一点。

例如CDN 技术,把用户请求的静态资源放在离用户更近的地方。

(7)一切可扩展,业务模块化、服务化(无状态、幂等)、良好的水平扩展能力。

性能测试后期的性能调优是一个复杂的过程,它涉及到多个层面的优化,包括但不限于设计、算法、代码、JVM、参数设置、数据库和系统配置等。

下面将详细探讨一些关键的性能调优策略,并引用相关资料中的细节。

设计优化

在软件开发的早期阶段,进行设计优化是至关重要的。良好的设计可以避免许多潜在的性能问题。架构师需要评估软件可能存在的各种潜在问题,并给出合理的设计方案。这包括选择合适的设计模式、使用高效的基本性能组件以及遵循最佳实践来构建系统。设计优化不仅影响系统的功能正确性,也决定了其扩展性和维护成本。

算法优化

优秀的算法能够显著提升系统的性能。例如,采用分而治之或预处理的方法可以在大数据量操作中节省大量时间。比如,在生成月报表时,通过每日计算并合并前一天的数据,而不是一次性计算整个月的数据,可以大大减少计算所需的时间。

代码优化

代码优化通常是在开发过程中或者维护阶段进行的。它涉及对程序代码的改进和优化,以提高执行效率。代码优化要求开发人员熟悉相关的语言API,并能灵活运用数据结构和算法。即使是细微的改动也可能带来显著的性能差异,如列表实现的选择(LinkedList vs ArrayList)或文件读写的实现方式。

JVM优化

由于Java程序运行在JVM之上,因此对JVM进行优化也能提升Java程序的性能。这包括调整堆大小、GC策略等参数。为了有效地进行JVM优化,开发者需要理解JVM的内存结构和垃圾回收机制,并据此设定合理的启动参数。

参数优化

中间件和系统级别的参数优化同样重要。这些参数的默认值有时不能满足高性能需求,需要根据实际情况进行调整。例如,对于Nginx、Tomcat等中间件,或是Linux系统的网络连接数、磁盘I/O等参数,都可能需要优化以适应特定的应用场景。

数据库优化

对于大多数应用而言,数据库是不可或缺的部分。数据库优化可以分为SQL语句优化、数据库配置优化以及数据库引擎本身的调优。优化措施包括索引的创建与使用、锁机制的优化、存储引擎的选择等。

性能调优不仅仅是技术层面的操作,更是一种艺术,它要求工程师具备深厚的技术功底和敏锐的问题洞察力。通过对系统各个层次的细致分析与调整,才能确保最终产品达到预期的性能标准。同时,持续监控和迭代也是保持系统长期健康运行的关键所在。无论是初学者还是有经验的专业人士,都需要不断学习最新的技术和方法论,以便更好地应对日益复杂的系统环境。

阅读后若有收获,不吝关注,分享,在看等操作!!!


网站公告

今日签到

点亮在社区的每一天
去签到