这周的主要内容,主要集中在性能测试,性能测试问题优化,操作系统原理,锁,文件IO、磁盘等内容。

概念

性能优化的前提和基础

性能优化结果检查和衡量标准

不同视角,标准不同,优化手段不同

  • 主观视角:客户能感受到的性能
  • 客观视角:性能指标衡量的性能

性能测试指标

响应时间

  • 应用系统从发出请求开始响应到收到最后响应数据的时间
    • 最重要的指标,直接反映系统的快慢

并发数

  • 系统能够同时处理请求的数目
    • 反映了系统的负载特性
    • 并发数即系统并发用户数,同时提交请求的用户数目
    • 在线用户数
      • 当前登录系统的用户数
    • 系统用户数
      • 可能访问系统的用户总数

吞吐量

  • 单位时间内系统处理的请求数量,体现系统的处理能力
  • 对于网站,可以衡量
    • 请求数/秒
    • 页面数/秒
    • 访问人数/天
    • 处理的业务数/小时
    • TPS、QPS、HPS
  • (1000/响应时间ms)*并发数

性能计数器

  • 描述服务器或者操作系统性能的一些指标数据
    • system load
    • 对象与线程数
    • 内存使用
    • cpu使用
    • 磁盘与io网络指标
  • 也是监控的指标,指标超过阈值,报警

性能测试方法

性能测试

  • 以系统设计初期规划的性能目标为预期目标,不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期

负载测试

  • 对系统不断增加并发请求以增加系统压力,直到系统某项或者多项系统指标达到临界值,如某种资源已经呈饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提升,反而下降

压力测试

  • 超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力

稳定性测试

  • 被测试系统在特定软件、硬件、网络环境条件下,给系统加载一定业务压力,使系统运行较长一段时间,以此检测系统是否稳定
  • 生产环境压力是不稳定的,呈波浪特性,稳定性测试也应该不均匀的对系统施加压力

按照https://time.geekbang.org/column/article/178076里的分析,上面的分类有一些争议,下面是一个用场景的定义来替换概念的分类:

各类测试的性能曲线图

  • 曲线图

全链路压测

挑战

  • 压力数据全涉及,无死角
  • 如果制造压测数据
  • 保证对线上无影响
  • 大型促销活动的压力如何制造

数据构造

  • 数据构造平台

数据隔离

  • 逻辑隔离
  • 虚拟隔离
  • 物理隔离

流量制造

  • 流量制造

全链路压测平台化

  • 压测平台化

性能优化

基本原则

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

主要指标

性能优化的一般方法

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

性能优化分层

  • 机房与骨干网络优化
  • 服务器与硬件优化
  • 操作系统性能优化
  • 虚拟机性能优化
  • 基础组件性能优化
  • 软件架构性能优化
    • 缓存
    • 异步
    • 集群
  • 软件代码性能优化
    • 并发编程
    • 资源复用
    • 异步编程
    • 数据结构

性能测试,极客时间有一门专门的课程 https://time.geekbang.org/column/intro/100041101

本人做性能测试的经验有限,在学习专栏后初步有了一些体系化的知识,但是还都是皮毛,实际落地的经验还需要继续丰富

操作系统

程序运行时架构

从大的层面上来说,计算机如何运行的,应该对计算机体系结构有一定的了解

对于我们平时写程序有时候需要关心的内容,包括老师讲解的

  • 操作系统多任务运行环境
  • 进程的运行期状态
  • 进程、线程
  • 线程栈
  • 线程安全
  • 临界区
  • 阻塞,高并发处理

锁是我们进行并发设计和编程的时候一个重要的工具。学习并发编程,可以从下面三个方面进行分析:分工,协作,互斥(https://time.geekbang.org/column/intro/159

老师的课程,对各类锁进行了细化分类的讲解

  • CAS
  • java中锁的实现 markword
  • 偏向锁,轻量级锁,重量级锁
  • 多cpu情况下的锁
  • 总线锁,缓存锁
  • 公平锁,非公平锁
  • 可重入锁
  • 独享锁,互斥锁,共享锁,读写锁
  • 乐观锁,悲观锁
  • 分段锁
  • 自旋锁

文件与硬盘IO

硬盘分类 机械硬盘 SSD硬盘

文件的组织形式 B+树 LSM树

文件控制块,linux innode 文件控制块

RAID

HDFS