软件性能优化的两个基本原则

  • 你不能优化一个没有测试的软件
  • 你不能优化一个你不了解的软件

性能测试的主要指标

  • 响应时间:完成一次任务花费的时间。
  • 并发数:同时处理的任务数。
  • 吞吐量:单位时间完成的任务数。
  • 性能计数器:System Load,线程数,进程数,CPU,内存,磁盘,网络使用率

Spark 应用性能测试

image.png

性能优化的一般方法

  • 性能测试,获得性能指标
  • 指标分析,发现性能与资源瓶颈点
  • 架构与代码分析,寻找性能与资源瓶颈关键所在
  • 架构与代码优化,优化关键技术点,平衡资源利用
  • 性能测试,进入性能优化闭环

不要拿着锤子去砸钉子,而是要找钉子。


系统性能优化的分层思想

  • 机房与骨干网络性能优化
  • 服务器与硬件性能优化
  • 操作系统性能优化
  • 虚拟机性能优化(垃圾回收,即时编译,锁)
  • 基础组件性能优化
  • 软件架构性能优化(分布式缓存,队列,消息等)
  • 软件代码性能优化

机房与骨干网络性能优化

image.png

美国到中国 300ms,就近提供服务器可以提升访问速度。

服务器与硬件性能优化

image.png

普通硬盘是毫秒级,

硬件性能优化案例

网络传输达到上限。

优化方案:升级网卡,10G网卡代替1G网卡。

image.png

操作系统性能优化

操作系统性能优化案例

image.png

虚拟机性能优化

image.png

基础组件性能优化

image.png

软件架构性能优化三板斧

  • 缓存
  • 异步
  • 集群

缓存

image.png

异步

  • 即时响应,更好的用户体验。
  • 控制消费速度,合适的负载压力。
  • 异步主要优化写操作。

image.png

集群

image.png

软件代码性能优化

遵循面向对象的设计原则与设计模式编程,很多时候程序性能不好不是因为性能上有什么技术挑战,仅仅就是因为代码太烂了。

  • 并发编程,多线程与锁。
  • 资源复用,线程池与对象池。
  • 异步编程,生产者消费者。
  • 数据结构,数组,链表,hash表,树

代码优化案例

image.png

image.png