好书推荐-<图解性能优化>?
因为工作的原因,对性能优化,程序调优比较关注,但是性能分析湿一个大课题。本书从应用,操作系统至网络逐步分析如何进行调优。
Let‘s Go!
第一章
- 什么是算法,具体例子
- 锁的性能,机制
锁
在并行情况下保证数据一致性的必要机制,锁的实现:
- golang:mutex
- java:synchronized,读写锁,除了这两种常规的锁方式,还提供无锁的操作类,最具代表性的就是使用CAS的ConcurrentHashMap
可能导致的问题:死锁
在两个对象互相争用对方已占用的资源而产生,解决方案?百度一下嘛兄弟。
如何提高性能
我认为是无法提高锁的性能,应该处理的是以下两个方面
- 提高的应该是被锁区域(下称:临界区)的处理速度,让下一个操作尽快进入。
- 降低临界区的粒度,控制其复杂度,只需要将保持原子性的代码放入临界区,不过还是推荐多写可重入的代码。
第二章
- 性能分析的基础:从数据开始(原话:从测量开始)
- 收集必要信息
- 性能分析工具
如何测量
这个是大部分初学者,刚接触性能分析的朋友比较头疼的问题,在此我推荐比较实用的工具
数据库级
- Mysql:如果线上允许可以使用Druid的监控
缓存级
- Redis:CacheCloud
语言级
- java:jmap,jhat,jstack,jvisualvm,MAT,jprofile,好了到这里都是大家知道的工具。另外:还有Netflix公司提供的FlameGraph火焰图
- golang:pprof
操作系统级
- 系统监控:zabbix,grafana
- 系统链路跟踪:CAT,pinpong
第三章
- 性能分析思路
- 如何调查原因
性能分析思路
应先熟悉整个链路,再从前端到数据库服务器排查整个链路出现性能问题的点,再去评估修复方案,最后就是用前面提到的一些工具帮助修复。
如何调查原因
建议看一下书中这一节中“初学者容易掉入的陷阱”中介绍的案例,例如:关注受害者,千万不要只关注受害者,要不永远不知道真正性能问题发生的原因。
第四章
- 掌握现场调优的准则
- 调优的技巧
现场调优的准则
- 时刻保持大局观。
- 要有前瞻性的眼光,但是调优需要适合目前的业务情况,不能过度优化。
- 多看数据,以数据为基准
调优的技巧
- 限流
- 访问频率高的数据,总在用户的附近
- 同步->异步
- 多任务处理
- LB
- Cache
- 读写分离 不再一一列举
第五章 性能测试
- 性能测试种类
- 有针对性的性能测试
- 性能测试的预估
为什么是由针对的性能测试?
不是每一个功能的需要进行性能测试,只需要测试真实有性能要求的功能才是有意义,例如:压测只有一个管理员使用的后台管理用户功能,这样做是无意义的。
为什么需要对性能测试进行预估?
对性能测试提供数据预估,是为性能测试的目标提供准则,为线上验证提供依据。 怎样进行性能预估?首先需要该功能的DAU,从DAU推算出平均QPS,使用现有数据的高峰期与平均QPS的比值,推算出该功能的高峰期QPS并用于性能测试。如果找不到DAU怎么办?找产品啊!还能咋办?产品没有咋办?自求多福,兄弟。
##第六章
- 什么是虚拟化
- 主要虚拟化技术
- 虚拟化性能分析方案
CPU及内存虚拟化技术
主要是超线程,CPU与内存过载使用的时候,宿主机如何去快速切换/调度CPU与内存的技术。
第七章
- 云计算与IDC架构的区别
- 云计算内部结构与最佳架构
- 云计算中的性能问题分析
差异?
就是上了云之后,可以再也不需要太操心硬件的问题,都有专人帮你解决,可以让开发人员更加专注于业务。
性能问题分析?
也是各种传统工具,其中两种就是AB与Jmeter。
最后
再次推荐该书,不仅对解决问题的思维有积极影响,对工作及生活都有另外一番思考。
祝各位读者阅读愉快!
Written on November 1, 2017