首页 > 其他分享 >【性能优化方法论系列】一、性能优化的本质

【性能优化方法论系列】一、性能优化的本质

时间:2023-03-20 11:33:03浏览次数:45  
标签:方法论 有限性 trace 性能 耗时 通常 优化


1 性能优化的根本目的是什么?

可能很多人没有认真思考过:“为什么我们需要进行性能优化?”这个问题。

在我看来,性能优化是为了“解决良好的用户体验和资源的有限性之间的矛盾”。

首先,我们性能优化一般都是追求更快的响应速度,通常最终目的是为了获得更好的用户体验。

【性能优化方法论系列】一、性能优化的本质_服务器

这里所说的资源是广义上的资源,“资源的有限性”包括:资金成本的有限性,人力资源的有限性,服务器等硬件资源的有限性,时间的有限性(如为了抢占市场,希望尽早上线造成的压力)等。

如果资源是无限的,如开发周期很长,投入的人力很多,服务器资源充足,甚至服务器内存是无限大的,那么设计出来的产品可能就不需要花费太多精力去优化。

2 出现性能问题的主要原因

通常,产品发布早期由于用户量较少,不太容易出现性能问题或者通常不会太去关注性能问题;但随着业务的不断发展,性能问题就逐渐暴露出来。

【性能优化方法论系列】一、性能优化的本质_性能优化_02

导致性能问题的原因有很多,常见的原因有:

  • 项目工期紧张,设计阶段技术方案考虑不充分;
  • 项目中使用了不合理的数据结构或算法;
  • 系统架构设计不合理;
  • 同步执行耗时任务;

3 性能优化的核心环节

不知道大家有没有深入思考过,我们平时写代码到底在写什么?

可能有些人会调侃地说:“无非就是 CURD”。

其实我们编码都是围绕着输入、处理和输出三个主要环节展开的。

【性能优化方法论系列】一、性能优化的本质_性能优化_03

因此,性能优化也要着重从这三点进行考虑。

如考虑如何更快地查询出数据,更快地对数据进行处理,更快地渲染数据等。

通常来说,处理部分是其中最核心的环节,也是优化的重点。

4 寻找性能瓶颈

性能优化的前提是要找到性能瓶颈,通常需要通过自测、压测、耗时告警日志、数据库慢查询日志、调用链路追踪技术等手段,发现性能瓶颈。

通常在实际开发中,某个接口的响应时间过长影响用户体验,如果条件允许,就要考虑优化。

通常 2C 的业务更关注性能优化,2B 的业务相较于 2C 的业务通常来说性能问题只要不是太严重,通常没那么紧迫。

产生性能瓶颈的原因有很多,如使用的算法时间复杂度较高、数据库查询语句没有覆盖到索引、调用链路过长等。

如果需要分析接口找出性能瓶颈,推荐大家使用 arthas ,可以使用其中的 ​​trace 命令​​,该命令可以追踪调用链路,给出调用的耗时。

【性能优化方法论系列】一、性能优化的本质_服务器_04

如使用 trace 命令,对某个耗时较长的接口进行分析: ​​trace com.xxx.service.impl.AServiceImpl refresh​​,给出下面结果:

【性能优化方法论系列】一、性能优化的本质_服务器_05


根据上面的结果可以看出,​​com.yyy.service.impl.AServiceImpl:refreshSomeThings​​ 耗时最长,可以继续再 trace 耗时最多的子函数,最终定位到最影响耗时的函数上。

找到耗时最长的环节之后,根据具体代码推断出耗时长的原因,然后再针对性地进行优化。

优化后可以通过性能测试压力测试等手段验证性能优化的有效性。


性能优化方法论系列目录
​​《一、性能优化的本质》​​《二、性能优化方法论的思想源泉》
《三、性能优化的核心思想(1)》
《三、性能优化的核心思想(2)》
《三、性能优化的核心思想(3)》
《四、性能优化的注意事项》
《五、实际案例分析》
《六、总结》


创作不易,如果本文对你有帮助,欢迎点赞、收藏加关注,你的支持和鼓励,是我创作的最大动力。

【性能优化方法论系列】一、性能优化的本质_性能瓶颈_06


标签:方法论,有限性,trace,性能,耗时,通常,优化
From: https://blog.51cto.com/mingmingruyue/6132492

相关文章

  • Java 中如何优化大量的 if...else...
    策略模式(StrategyPattern)将每个条件分支的实现作为一个独立的策略类,然后使用一个上下文对象来选择要执行的策略。这种方法可以将大量的ifelse语句转换为对象之间的交互......
  • $\mathcal{Crypto}$ 共模攻击原理实现以及$\mathcal{CRT}$优化
    共模攻击概述共模攻击是一种攻击\(RSA\)加密的技术,当两个密文使用相同的\(RSA\)公共模数时,攻击者可以使用中国剩余定理\((CRT)\)和最大公因数\((GCD)\)算法,推导出明文。这......
  • 【性能测试】性能监控命令(MEMORY | IO and NETWORK | CPU)
    一、性能监控命令|MEMORYMEMORY首先说说虚拟内存和物理内存:虚拟内存就是采用硬盘来对物理内存进行扩展,将暂时不用的内存页写到硬盘上而腾出更多的物理内存让有需要的......
  • 在echaerts中渲染50万条数据的优化方案
    背景:项目需求中要在页面上渲染大约50万条左右的波形数据图表  那么如何解决渲染中的卡顿呢?肯定是要从服务端和前端一起优化这是毋庸置疑的。1.服务端:服务端耗时最......
  • 基于matlab的CHPSO异质粒子群优化算法仿真
    1.算法描述粒子群优化算法(ParticleSwarmOptimization,PSO)最初由Kenndy和Eberhart博士于1995年提出,是一种有效的随机全局优化技术,具有原理简单、参数少、收敛速度较快......
  • 线上sql执行慢,分享3个优化案例
    前段时间,博主线上项目的几个后端接口执行耗时达到了三、四秒钟以上,查看接口代码,发现sql语句执行过慢,于是开始分析sql执行这里把比较经典的优化案例分享给大家。本文......
  • 优化案例
    优化案例1:现象:最近发现几个监控用的脚本在连接监控数据库的时候偶尔会连不上,报错:Couldn'tconnecttohost:3306/tcp:IO::Socket::INET:connect:Cannotassignreque......
  • 性能测试基础知识体系
    转载:https://www.cnblogs.com/imyalost/p/14966389.html谈起性能测试,大家经常聊的是高并发、高可用、性能优化、全链路压测等Topic,听起来都挺高大上,但这些概念追本溯源,还......
  • 分布式流处理组件-优化篇:Producer生产调优之核心参数
    ......
  • Linux 6.3 对EXT4文件系统写入性能改进补丁
    EXT4(第四代扩展文件系统)是 ​​Linux​ 系统下的日志文件系统,目前该系统已趋于稳定,但在Linux6.3合并窗口中再获得了一些直接I/O性能改进补丁,改进了写入速度。EXT4(......