软件性能优化的两个基本原则
- 你不能优化一个没有测试的软件
- 你不能优化一个你不了解的软件
性能测试的主要指标
- 响应时间:完成一次任务花费的时间。
- 并发数:同时处理的任务数。
- 吞吐量:单位时间完成的任务数。
- 性能计数器:System Load,线程数,进程数,CPU,内存,磁盘,网络使用率
Spark 应用性能测试
性能优化的一般方法
- 性能测试,获得性能指标
- 指标分析,发现性能与资源瓶颈点
- 架构与代码分析,寻找性能与资源瓶颈关键所在
- 架构与代码优化,优化关键技术点,平衡资源利用
- 性能测试,进入性能优化闭环
不要拿着锤子去砸钉子,而是要找钉子。
系统性能优化的分层思想
- 机房与骨干网络性能优化
- 服务器与硬件性能优化
- 操作系统性能优化
- 虚拟机性能优化(垃圾回收,即时编译,锁)
- 基础组件性能优化
- 软件架构性能优化(分布式缓存,队列,消息等)
- 软件代码性能优化
机房与骨干网络性能优化
美国到中国 300ms,就近提供服务器可以提升访问速度。
服务器与硬件性能优化
普通硬盘是毫秒级,
硬件性能优化案例
网络传输达到上限。
优化方案:升级网卡,10G网卡代替1G网卡。
操作系统性能优化
操作系统性能优化案例
虚拟机性能优化
基础组件性能优化
软件架构性能优化三板斧
- 缓存
- 异步
- 集群
缓存
异步
- 即时响应,更好的用户体验。
- 控制消费速度,合适的负载压力。
- 异步主要优化写操作。
集群
软件代码性能优化
遵循面向对象的设计原则与设计模式编程,很多时候程序性能不好不是因为性能上有什么技术挑战,仅仅就是因为代码太烂了。
- 并发编程,多线程与锁。
- 资源复用,线程池与对象池。
- 异步编程,生产者消费者。
- 数据结构,数组,链表,hash表,树