没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
怎样才能做好性能调优?
先给你讲个故事吧。多年前我加入了一家大型互联网公司,刚进入就以 996 标准,参与
新品研发。公司业务发展急需互联网产品,因此我们的时间很紧张,4 个月新产品就上线
了。
开始还算顺利,但不久后的一天晚上,系统突然就瘫痪了,重启之后,问题仍然无规律地
重现。当时运维同事马上写了一个重启脚本,定时排队重启各个服务,但也只能做到“治
标不治本”。
作为主力开发,我和公司的系统架构师一起排查问题。架构师轻车熟路地通过各种 Linux
命令在线上环境查看性能指标,也 dump 出日志文件,走查代码,最后定位到了问题,后
面就是分析原因、制定解决方案、更新版本等一系列操作。那是我第一次深刻感受到性能
调优的重要性。
后来的几年里,我又陆续参与过物流、电商、游戏支付系统的研发,这些项目都存在一个
共性,就是经常会运营一些大促以及抢购类活动。活动期间,系统不仅要保证处理请求业
务的严谨性,还要历经短时间内高并发的考验。我也一直处于性能调优的一线。
正所谓“实践出真知“。这些年在生产环境中遇到的事故不少,很多坑一点点踩平,就走
出了一条路,这个过程中我收获了很多实打实的经验,希望能分享给更多的人,我们一起
学习、交流和探讨。
关于性能调优,我先来说说的我的感受。Java 性能调优不像是学一门编程语言,无法通
过直线式的思维来掌握和应用,它对于工程师的技术广度和深度都有着较高的要求。
互联网时代,一个简单的系统就囊括了应用程序、数据库、容器、操作系统、网络等技术,
线上一旦出现性能问题,就可能要你协调多方面组件去进行优化,这就是技术广度;而很
多性能问题呢,又隐藏得很深,可能因为一个小小的代码,也可能因为线程池的类型选择
错误…可归根结底考验的还是我们对这项技术的了解程度,这就是技术深度。
显然,性能调优不是一件容易的事。但有没有什么方法能把这件事情做好呢?接下来跟你
分享几点我的心得。
1. 扎实的计算机基础
我们调优的对象不是单一的应用服务,而是错综复杂的系统。应用服务的性能可能与操作
系统、网络、数据库等组件相关,所以我们需要储备计算机组成原理、操作系统、网络协
议以及数据库等基础知识。具体的性能问题往往还与传输、计算、存储数据等相关,那我
们还需要储备数据结构、算法以及数学等基础知识。
2. 习惯透过源码了解技术本质
我身边有很多好学的同学,他们经常和我分享在一些技术论坛或者公众号上学到的技术。
这个方式很好,因为论坛上边的大部分内容,都是生产者自己吸收消化后总结的知识点,
能帮助我们快速获取、快速理解。但是只做到这个程度还不够,因为你缺失了自己的判断。
怎么办呢?我们需要深入源码,通过分析来学习、总结一项技术的实现原理和优缺点,这
样我们
就能更客观地去学习一项技术,还能透过源码来学习牛人的思维方式,收获更好的编码实
现方式。
3. 善于追问和总结
很多同学在使用一项技术时,只是因为这项技术好用就用了,从来不问自己:为什么这项
技术可以提升系统性能?对比其他技术它好在哪儿?实现的原理又是什么呢?事实上,
“知其然且知所以然”才是我们积累经验的关键。知道了一项技术背后的实现原理,我们
才能在遇到性能问题时,做到触类旁通。
在这个专栏里,我将从实战出发,精选高频性能问题,透过 Java 底层源码,提炼出优化
思路和它背后的实现原理,最后形成一套“学完就能用的调优方法论”。这也是很多一线
大厂对于高级工程师的要求,希望通过这个专栏帮助你快速进阶。
那这个专栏具体是怎么设计的呢?结合 Java 应用开发的知识点,我将内容分为七大模块,
从上到下依次详解 Java 应用服务的每一层优化实战。
模块一,概述。为你建立两个标准。一个是性能调优标准,告诉你可以通过哪些参数去衡
量系统性能;另一个是调优过程标准,带你了解通过哪些严格的调优策略,我们可以排查
性能问题,从而解决问题。
模块二,Java 编程性能调优。JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具
类,可以帮助你编写出高性能代码。这里我会从基础的数据类型讲起,涉及容器在实际应
用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。
模块三,多线程性能调优。目前大部分服务器都是多核处理器,多线程编程的应用广泛。
为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有
多线程高并发带来的性能问题,这些都会在这个模块重点讲解。
模块四,JVM 性能监测及调优。Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优
可以提升系统性能。这里重点讲解 Java 对象的创建和回收、内存分配等。
模块五,设计模式调优。在架构设计中,我们经常会用到一些设计模式来优化架构设计。
这里我将结合一些复杂的应用场景,分享设计优化案例。
模块六,数据库性能调优。数据库最容易成为整个系统的性能瓶颈,这里我会重点解析一
些数据库的常用调优方法。
模块七,实战演练场。以上六个模块的内容,都是基于某个点的调优,现在是时候把你前
面所学都调动起来了,这里我将带你进入综合性能问题高频出现的应用场景,学习整体调
优方法。
01 | 如何制定性能调优标准?
我有一个朋友,有一次他跟我说,他们公司的系统从来没有经过性能调优,功能测试完成
后就上线了,线上也没有出现过什么性能问题呀,那为什么很多系统都要去做性能调优
呢?
当时我就回答了他一句,如果你们公司做的是 12306 网站,不做系统性能优化就上线,
试试看会是什么情况。
如果是你,你会怎么回答呢?今天,我们就从这个话题聊起,希望能跟你一起弄明白这几
个问题:我们为什么要做性能调优?什么时候开始做?做性能调优是不是有标准可参考?
为什么要做性能调优?
一款线上产品如果没有经过性能测试,那它就好比是一颗定时炸弹,你不知道它什么时候
会出现问题,你也不清楚它能承受的极限在哪儿。
有些性能问题是时间累积慢慢产生的,到了一定时间自然就爆炸了;而更多的性能问题是
由访问量的波动导致的,例如,活动或者公司产品用户量上升;当然也有可能是一款产品
上线后就半死不活,一直没有大访问量,所以还没有引发这颗定时炸弹。
现在假设你的系统要做一次活动,产品经理或者老板告诉你预计有几十万的用户访问量,
询问系统能否承受得住这次活动的压力。如果你不清楚自己系统的性能情况,也只能战战
兢兢地回答老板,有可能大概没问题吧。
所以,要不要做性能调优,这个问题其实很好回答。所有的系统在开发完之后,多多少少
都会有性能问题,我们首先要做的就是想办法把问题暴露出来,例如进行压力测试、模拟
可能的操作场景等等,再通过性能调优去解决这些问题。
比如,当你在用某一款 App 查询某一条信息时,需要等待十几秒钟;在抢购活动中,无
法进入活动页面等等。你看,系统响应就是体现系统性能最直接的一个参考因素。
那如果系统在线上没有出现响应问题,我们是不是就不用去做性能优化了呢?再给你讲一
个故事吧。
曾经我的前前东家系统研发部门来了一位大神,为什么叫他大神,因为在他来公司的一年
时间里,他只做了一件事情,就是把服务器的数量缩减到了原来的一半,系统的性能指标,
反而还提升了。
好的系统性能调优不仅仅可以提高系统的性能,还能为公司节省资源。这也是我们做性能
调优的最直接的目的。
什么时候开始介入调优?
解决了为什么要做性能优化的问题,那么新的问题就来了:如果需要对系统做一次全面的
性能监测和优化,我们从什么时候开始介入性能调优呢?是不是越早介入越好?
其实,在项目开发的初期,我们没有必要过于在意性能优化,这样反而会让我们疲于性能
优化,不仅不会给系统性能带来提升,还会影响到开发进度,甚至获得相反的效果,给系
统带来新的问题。
我们只需要在代码层面保证有效的编码,比如,减少磁盘 I/O 操作、降低竞争锁的使用
以及使用高效的算法等等。遇到比较复杂的业务,我们可以充分利用设计模式来优化业务
代码。例如,设计商品价格的时候,往往会有很多折扣活动、红包活动,我们可以用装饰
模式去设计这个业务。
在系统编码完成之后,我们就可以对系统进行性能测试了。这时候,产品经理一般会提供
线上预期数据,我们在提供的参考平台上进行压测,通过性能分析、统计工具来统计各项
性能指标,看是否在预期范围之内。
剩余427页未读,继续阅读
壹升茉莉清
- 粉丝: 8013
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页