应用性能优化是软件开发中非常重要的环节,是中高级的软件开发能力,也是咨询服务的重点内容。
本文以Java作为开发语言展开。在国内Java语言还是企业应用,互联网应用开发的首选语言。
很多朋友们提出过问题,在Java应用性能优化方面,有哪些重要的技术内容呢。我做了如下梳理:
按照开发和运维阶段,分为三大模块:应用设计优化、Java 性能调优、操作系统和云计算性能优化。
模块A 应用设计优化
我们在开发应用时,会进行软件架构设计。架构师需要结合应用需求,来进行整体软件设计,包括要考虑线程并发,IO异步,分布式,如何访问数据库,使用集群并考虑容错等因素。
这些知识点既是为架构设计,又是为软件优化,可以说前期的架构设计,会决定最终应用系统性能60~80%性能比重。Java 性能因素的绝大部分由架构设计决定的,少数部分由部署阶段的性能调优实现。
应用设计优化有其原则和时机,一般来说,基于Java的应用会基于成熟的架构开发,如Spring框架,这些框架已经经过了数以万计的开发团队使用和打磨,成熟稳定。这样开发者不用花太多时间在底层细节的处理和优化上,当然架构师和高级开发人员对框架的熟悉是很有必要的,方便使用,扩展和排错。
Java语言中的线程并发和IO机制是核心技术内容,开发者应当非常熟悉这些基础知识并熟练运用。
对于分布式微服务,我们需要了解分布式技术原理和设计,对分布式中间件熟练应用,熟悉集群的原理和配置。管理微服务,通过可探测性来监控其性能并持续优化。
模块内容:
一、应用优化概述
模块B Java 性能调优
涉及 Java 性能优化的各个方面,重点阐述 JVM 性能和中间件调优策略。了解Java 原理和技术,如何充分利用现代硬件和操作系统、衡量 Java性能,帮助团队中各种角色的技术人员了解 Java 性能分析和调优方法,编写并部署更高效的 Java 应用程序。
Java虚拟机性能分析,主要从几个部分展开:线程分析,堆和对象分析,GC分析。当然系统整体CPU,内存,IO,数据库,网络等也是重要考察的。
Java有非常丰富的工具,能理解并运用这些工具,能帮助开发者事半功倍。JVM运行时环境的充分了解,以及应用层中间件的分析调优,也是重点学习内容。
模块内容:
一、性能调优初步
1. 系统资源限制
2 调优分析层面
3 调优时机
4 基本工具一览
5 Linux 工具
二、 Java 调优
1. JDK 命令行工具
2. 实践案例
三、 JVM 调优
1. 性能相关概览
2. 虚拟机参数使用
3. 内存监控
4. 垃圾收集
5. 选择垃圾收集算法
6. 调优方法
7. 类加载
8. JIT 编译优化
9. 线程监控
10. 磁盘 IO
11. CPU 记录和调度
四、应用层中间件调优
1. 线程池
2. 数据库连接池
3. 组件池
4. Web 容器
5. 状态缓存池
6. 消息部分
7. 负载均衡
8. 日志记录和优化
五、 高级工具
1. JVMTI 接口
2. JMC GUI
3. 使用 JFR
4. JitWatch
5. Byteman
包括操作系统和容器层面的性能调优知识点,介绍系统级调优的方法和工具。对于目前云原生开发,也从架构设计和部署运维角度进行分析说明。对于跨平台跨语言的开发场景,使用 ServiceMesh 是服务治理的一个良好选择。
Java开发的应用程序,在很多场景下性能问题是由运行环境引起的,这就需要我们具备操作系统和云计算设施服务技术知识,能够进行系统级别排错和调用。
系统环境对应用进行分析,除了前面提到的可观测性的运维监控外,还有静态监控和动态监控等技术方法。现代操作系统,如Linux已经在内核级别提供了丰富的扩展机制,通过工具和开发环境,可以进行系统和应用级别的分析和调优。
比如Systemtab是操作系统经典的动态追踪工具,在RHEL6/7都是作为主打系统分析工具提供,红帽公司的系统架构师提供技术支持,也有对应的培训课程。
BPF(Berkeley Packet Filter)在设计之初是提升网络包过滤工具的性能,2014年并入Linux内核主线,这样BPF变成了一个更通用的执行引擎,可以完成多项性能分析的任务。

BCC(BPF Compiler Collection)提供了使用BPF对事件进行观测的库函数,bpftrace展示具体的观测操作以及数据是如何被处理的。RHEL8中Systemtab和BPF都作为应用调试能力工具使用。
通过使用上述强有力的工具,可以对应用所处的运行环境进行分析诊断,找到问题所在。
在云环境中,结合容器技术,一种良好的部署架构就是采用ServiceMesh方式,将所有非业务能力都从业务应用进程剥离分开,能够充分利用云原生服务平台带来的好处。
模块内容:
一、性能优化总体概述
应用性能调优,从本质上来说,和软件应用设计开发是一体的,需要不断迭代优化和打磨更新,是个持续的过程。
软件系统的系统整体把控和代码和配置信息的可读可维护性成为关键。
性能监控和软件分析,就如同现实社会商业运作一样,在一个有序的大系统之中运行。当有事件发生时,有相应的主体接收并处理事件(Event),执行相应的动作(Function)。
如果是和外部打交道,就是进行消息通信(分布式调用)。软件架构都可以用这种模型去理解和设计,所有的架构模型,无论是单体还是微服务,都是这种社会化模型的一个抽象。
软件性能分析和调优,是一项技术,更是解决问题的一种方法论。希望可以和更多的朋友深入探讨,期待多交流。




