系统突然瘫痪,重启后,问题仍无规律重现。运维马上写个重启脚本,定时排队重启各服务,但“治标不治本”。
作为主力排查问题,通过各种 Linux 命令在线上环境查看性能指标,dump 日志文件,走查代码,最后定位问题,后面分析原因、制定解决方案、更新d版本等。这就是一次性能调优和解决技术问题思路。
很多 ROI 高系统会做大促。期间,系统不仅要保证处理请求业务的严谨性,还要历经短时间内高并发的考验。我也一直处性能调优一线。
Java 性能调优不像是学一门编程语言,无法通过直线式的思维来掌握和应用,它对于工程师的技术广度和深度都有着较高要求:
调优对象不是单一的应用服务,而是复杂系统。应用服务性能可能与操作系统、网络、数据库等组件相关,需储备计算机组成原理、操作系统、网络协议以及数据库等基础知识。
具体性能问题往往还与传输、计算、存储数据等相关,那我们还需要储备数据结构、算法以及数学等基础知识。
身边很多好学的同学,经常和我分享在一些技术论坛或公众号学到的技术。这个方式很好,因为论坛上边的大部分内容,都是生产者自己吸收消化后总结的知识点,能帮我们快速获取、快速理解。但只做到这个程度不够,因为你缺失自己的判断。
需深入源码,通过分析来学习、总结一项技术的实现原理和优缺点,就能更客观地去学习一项技术,还能透过源码来学习牛人的思维方式,收获更好的编码实现方式。
很多同学在使用一项技术,只因这项技术好用就用,从不思:
“知其然且知所以然”才是积累经验的关键。知道一项技术背后的实现原理,才能在遇到性能问题时,触类旁通。
本专栏实战出发,精选高频性能问题,透过 Java 底层源码,提炼优化思路和背后实现原理,得到“学完就能用的调优方法论”。
为你建立两个标准。一个是性能调优标准,告诉你可以通过哪些参数去衡量系统性能;另一个是调优过程标准,带你了解通过哪些严格的调优策略,我们可以排查性能问题,从而解决问题。
JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具类,可以帮助你编写出高性能代码。这里我会从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。
目前大部分服务器都是多核处理器,多线程编程的应用广泛。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个模块重点讲解。
Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。这里重点讲解 Java 对象的创建和回收、内存分配等。
在架构设计中,我们经常会用到一些设计模式来优化架构设计。这里我将结合一些复杂的应用场景,分享设计优化案例。
数据库最容易成为整个系统的性能瓶颈,这里我会重点解析一些数据库的常用调优方法。
综合性能问题高频出现的应用场景,学习整体调优方法。
许多场景下是同一个概念,但两者在侧重点上可能有细微的差别:
在实际工作中,两者经常混用。如果系统性能不足且需要调整,更多使用“性能调优”;而对于系统整体性能的持续改进,多用“性能优化”。
本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。 各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。 负责:
参考: