首页 > 其他分享 >系统设计和开发中,方法论PK技术

系统设计和开发中,方法论PK技术

时间:2023-03-22 15:00:43浏览次数:32  
标签:分析 方法论 性能 线程 内存 设计 PK 工具 CPU


记得在前些年,有一次,在客户那里做系统的性能分析和调整时,也是一点一点的分析,也没有什么头绪。有一个客户那边的负责人,对我们当时的一些做法表示不理解,当时他说了一句话:“做性能分析和调整,首先你得有自己的方法论,然后再谈具体的技术手段”。当时我们还觉得这个客户对我们有意见,觉得自己的做法没有什么不对的。但是在后面这些年里,我深刻的感觉到,这句话真是金玉良言。

 

其实我并不大喜欢充满哲学味道的东西,我喜欢简单直白的,但是,过于直白,直指目标的一些做法,让自己走了很多弯路,付了很多额外的代价,回过头来,再琢磨,原来那些简单又质朴的话,是不能违背的规律,是必须遵守的守则。

 

意识到这些之后,我特意针对性能分析和性能调优进行了很多的总结,尤其侧重在方法论,简单的描述一下吧。

 

第一:要判断性能分析的目标

 

          是为了PK,还是为了实际使用?

 

          你的真实场景,到底需要什么样的性能?

 

 

第二:你的周边环境,到底可以为你提供什么样的效率和性能?

 

        例如数据库、例如网络

 

 

第三:业务的分析

 

      业务流程是否可以优化?来提高效率?这个最好是对着每一个业务的流程图仔细思考。

 

第四:检查你的架构

 

      软件实现层面的效率问题,很多都是由架构不良带来的,你即便每一行代码都精简,都无法扭转坏的架构带来的影响。

 

     例如在哪里应当使用缓存,在哪里必须实时读数据库;在哪里需要等待(Sleep),在哪里可以立即进行;在哪里必须使用同步锁,在哪里可以并行或异步,等等等等。

 

第五:使用性能分析工具

 

     一般来讲,一般不使用性能分析工具来判断架构是否存在问题,而是用来判断具体代码环节是否有问题。使用工具,理念就是“先查找到瓶颈,再进行优化”。实际上,应该是前边几条之后,再进行这一层面上的分析。

 

工具有几类,有Java自带的工具,有其他第三方工具。

 

    Java命令行可以通过参数,直接进行CPU、内存的分析。当然,还有JConsole和VisualVM,可以用来辅助进行性能分析。还可以分析GC的活动。

 

   第三方工具包括JProfile之类工具,可以进行更加细致的分析,分析结果直接转换成实时的曲线图,非常容易定位性能瓶颈。

 

使用工具,一般应该首先关注CPU(当然,除非你怀疑自己的系统有内存泄漏问题而进行排查,那样的话,优先关注内存),其次得关注线程(是否有过多的锁定和等待)。

 

关注CPU,直接定位到最消耗CPU的部分和方法,那么可以非常有针对性的把方法替换为高效实现,这是最简单的系统优化方法。

 

例如在某个系统分析时,发现Base64.encode消耗CPU非常多,于是在网上搜到了一个FastBase64的实现,替换上去,就发现系统性能马上提高一大截。

 

当然,最常见的是,解决了一个瓶颈,性能有所改进,又遇到另外一个瓶颈,每一步都非常艰难,每一步都有所进步。

 

 

关注线程,非常有利于发现配置不当引起的性能问题。例如数据库连接池配置的太小,例如线程池配置的太小,引起很多时候都在等待空闲连接(或空闲线程)的释放,发现哪里的问题,就可以通过调整配置的方式来改进系统。

 

 

关注内存,可以发现是否因为内存的不当使用,使系统很多时候在做GC,从而引起业务的暂停。

 

最后一点:要考虑系统特性的平衡

 

系统在某一个性能数据上,达到了一种极致。在此时,再继续做性能的优化,一定会牺牲系统的其他特性。在此时,如何折衷?是性能至上,继续高歌猛进,牺牲其他特性(例如可扩展性等等);还是优先考虑其他特性,接受当前的性能呢?这是所有架构师需要仔细考虑的问题。

 

 

说句题外话,在产品的设计、实现期间,又何尝不是如此,先要有了工作的方法论,再谈技术。没有方法论,产品变成一堆技术的杂烩,是一件可悲的事情。

 

标签:分析,方法论,性能,线程,内存,设计,PK,工具,CPU
From: https://blog.51cto.com/u_2650279/6142648

相关文章

  • DevOps实战笔记-DevOps平台设计和开发
    DevOps实战笔记-DevOps平台设计和开发1简介1.1DevOps概述最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。DevOps早在20......
  • 小菜学设计模式 工厂设计模式 Simple Factory Pattern
    设计模式的工厂设计模式。工厂模式有以下几种形态:简单工厂(SimpleFactory)模式工厂方法(FactoryMethod)模式抽象工厂(AbstractFactory)模式优点:工厂类含有必要的判断逻......
  • 小菜学设计模式 单一职责原则
    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因!如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。......
  • ITSM | 如何通过设计提升工单处理效率
    随着数字化的进程不断加快,企业对IT团队和组织协作效率要求也不断提高。嘉为蓝鲸IT服务管理中心,基于ITIL实践,提供事件管理、问题管理、变更管理、请求管理能力,并通过与ITOM的......
  • Cadence IC617 设计环境安装
    运行库配置yumupdatekernel–yyuminstallkernel-headers–yyuminstallkernel-devel–yyuminstallgcc–yyuminstallmake–yCadence需要的库yuminst......
  • 性能测试技术笔记(三):如何设计一个压测平台
    转载:https://www.cnblogs.com/imyalost/p/17031603.html前面两篇笔记介绍了如何快速上手压测项目以及压测前准备测试环境和测试数据的一些方法。这篇文章,我想分享下关于......
  • 前端设计模式——模板方法模式
    模板方法模式(TemplateMethodPattern):定义一个行为的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个行为的结构即可重定义该行为的某些特定步骤。这些步......
  • 【控制】高增益扩张状态观测器的设计(9.1)
    1理论框架2一阶系统描述3二阶系统描述对于上述状态及扰动项的估计,参考​​状态观测器的设计​​内容。4仿真实例5仿真结果相关参数matlab中均已给出。仿真分别采用了线......
  • 面向对象设计&&类与对象的关系
    1、面向对象程序设计程序设计的过程,就是设计类的过程万物皆对象,程序来源生活,只不过是抽象化--现实的类抽象化人类:java程序中的类人:Java中具体的对象姓名,年龄等等:java......
  • 现代设计
    现代设计方法有哪些?传统设计,现代设计?现代设计手段,特征?优化设计数学模型?有无约束设计方法?直接法,间接法?有限元的基本思想?软件?基本思路?过程?可......