先给你讲个故事吧
多年前我加入了一家大型互联网公司,刚进入就以 996 标准,参与新品研发。公司业务发展急需互联网产品,因此我们的时间很紧张,4个月后新产品就上线了。开始还算顺利,但不久后的一天晚上,系统突然就瘫痪了,重启之后,问题仍然无规律地重现。当时运维同事马上写了一个重启脚本,定时排队重启各个服务,但也只能做到“治标不治本”。作为主力开发者,我和公司的系统架构师一起排查问题。架构师轻车熟路地通过各种 Linux命令在线上环境查看性能指标,也 dump 出日志文件,走查代码,最后定位到了问题,后面就是分析原因、制定解决方案、更新版本等一系列操作。那是我第一次深刻感受到性能调优的重要性。
后来的几年里,我又陆续参与过物流、电商、游戏支付系统的研发,这些项目都存在一个共性,就是经常会运营一些大促以及抢购类活动。活动期间,系统不仅要保证处理请求业务的严谨性,还要历经短时间内高并发的考验。我也一直处于性能调优的一线。正所谓“实践出真知“。这些年在生产环境中遇到的事故不少,很多坑一点点踩平,就走出了一条路,这个过程中我收获了很多实打实的经验,希望能分享给更多的人,我们一起学习、交流和探讨。
Java性能调优笔记
由于篇幅限制就只能以截图主要内容的方式展示出来了,需要获取完整《Java性能调优笔记》的小伙伴文末有获取方式!
关于性能调优,我先来说说我的感受。Java 性能调优不像是学一门编程语言,无法通过直线式的思维来掌握和应用,它对于工程师的技术广度和深度都有着较高的要求。互联网时代,一个简单的系统就囊括了应用程序、数据库、容器、操作系统、网络等技术,线上一旦出现性能问题,就可能要你协调多方面组件去进行优化,这就是技术广度;而很多性能问题呢,又隐藏得很深,可能因为一个小小的代码,也可能因为线程池的类型选择错误…可归根结底考验的还是我们对这项技术的了解程度,这就是技术的深度。
显然,性能调优不是一件容易的事。但有没有什么方法能把这件事情做好呢?
模块一:概述
为你建立两个标准。一个是性能调优标准,告诉你可以通过哪些参数去衡量系统性能;另一个是调优过程标准,带你了解通过哪些严格的调优策略,我们可以排查性能问题,从而解决问题。
如何制定性能调优标准?
模块二:Java 编程性能调优
JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具类,可以帮助你编写出高性能代码。这里我会从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。
字符串性能优化不容小觑,百M内存轻松存储几十G数据
模块三:多线程性能调优
目前大部分服务器都是多核处理器,多线程编程的应用广泛。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个模块重点讲解。
多线程之锁优化(上):深入了解Synchronized同步锁的优化方法
模块四:JVM 性能监测及调优
Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。这里重点讲解 Java 对象的创建和回收、内存分配等。
磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型
模块五:设计模式调优
在架构设计中,我们经常会用到一些设计模式来优化架构设计。这里我将结合一些复杂的应用场景,分享设计优化案例。
单例模式:如何创建单一对象优化系统性能?
模块六:数据库性能调优
数据库最容易成为整个系统的性能瓶颈,这里我会重点解析一些数据库的常用调优方法。
MySQL调优之SQL语句:如何写出高性能SQL语句?
模块七:实战演练场
以上六个模块的内容,都是基于某个点的调优,现在是时候把你前面所学都调动起来了,这里我将带你进入综合性能问题高频出现的应用场景,学习整体调优方法。
如何设计更优的分布式锁?
需要获取这份《Java性能调优笔记》465页文档的小伙伴可以一键三连(点赞+收藏+关注)后直接添加微信:mxh5261 即可免费获取
要善于追问和总结
很多同学在使用一项技术时,只是因为这项技术好用就用了,从来不问自己:为什么这项技术可以提升系统性能?对比其他技术它好在哪儿?实现的原理又是什么呢?事实上,“知其然且知所以然”才是我们积累经验的关键。知道了一项技术背后的实现原理,我们才能在遇到性能问题时,做到触类旁通。