因为工作的原因,对性能优化,程序调优比较关注,但是性能分析湿一个大课题。本书从应用,操作系统至网络逐步分析如何进行调优。

## 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。

最后

再次推荐该书,不仅对解决问题的思维有积极影响,对工作及生活都有另外一番思考。

祝各位读者阅读愉快!