第七周总结
一、性能测试
1、性能测试的概念
概念:性能优化的前提和基础,也是性能优化结果的检查和度量标准
主观视角:用户感受到的性能
客观视角:性能指标衡量的性能
2、性能指标
响应时间 — 反应系统的快慢
并发数 — 系统能够同时处理请求的数目,这个数字也反应了系统的负载特性
吞吐量 — 单位时间内系统处理的请求的数量,体现系统的处理能力
性能计数器 — 描述服务器或操作系统性能的一些数据指标 System Load、线程数、进程数、CPU、内存、磁盘和网络使用率
3、性能测试方法
性能测试
负载测试
压力测试
稳定性测试
二、性能优化
1、软件性能优化的两个基本原则
你不能优化一个没有测试的软件
你不能优化一个你不了解的软件
2、性能优化的一般方法
性能测试,获得性能指标
指标分析,风险性能与资源瓶颈点
架构与代码分析,寻找性能与资源瓶颈关键所在
架构与代码分析,优化关键技术点,平衡资源利用
性能测试,进入性能优化闭环
3、系统性能优化的分层思想
机房与骨干网络性能优化
异地多活的多机房架构
服务器与硬件性能优化 — 垂直扩展,使用更优的 CPU,磁盘,网卡,对软件的性能优化可能是数量级的,有时候远远超过代码和架构的性能优化
操作系统性能优化案例
虚拟机性能优化
虚拟机性能优化
基础组件性能优化
软件架构性能优化三板斧
缓存
软件代码性能优化
遵循面对对象的设计原则与设计模式编程,很多时候程序性能不好不是因为西能上有什么技术挑战,仅仅就是因为代码写的太烂了
三、操作系统
程序运行时架构
操作系统多任务运行环境
进程的运行期状态
运行
就绪
阻塞
进程 vs 线程
阻塞导致高并发系统崩溃 — 锁会引起线程阻塞,阻塞会导致线程既不能继续执行,也不能释放资源,进而导致资源好近,最终导致系统奔溃
避免阻塞引起的奔溃
限流 — 控制进入计算机的请求书,进而减少创建的进程数
降级 — 关闭部分功能程序的执行,尽早释放线程
反应式 — 异步,无临界区
四、锁
1、CAS 锁原语
定义
CAS(V,E,N)
比较 V(原值)与 E(期望值),如果两者相等,则将 V(原值)设置为 N(新值),否则什么都不做
CAS 是一种系统原语,原语的执行必须是连续的,在执行过程中不允许被中断;是指 CPU 的操作不会被中断,但是存在多个 CPU 情况;
Java 中 CAS 原语的实现方式
在对象头中修改 Mark Word 实现加锁功能,Mark Word 的结构如下
偏向锁 --- 一段代码一直被一个线程锁访问,那么该线程会自动获取锁,降低获取锁的代价
轻量级锁 --- 指当前锁是偏向锁时,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提高性能
重量级锁 — 指当锁是轻量级锁时,另一个线程虽然自旋,但自旋不会一直持续下去,当自旋到一定次数时,还没获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁会让其他申请的线程进入阻塞,性能降低;(通过 monitor 的监视器,把线程放在 monitor 的等待队列中,监视器监控到锁被释放后,会去唤醒等待队列中的等待线程)
2、多 CPU 情况下的锁
总线锁 — 使用处理器的 LOCK#信号,当一个处理器在内存总线上输出此信号的时候,其他处理器的请求将被阻塞,该处理器独占内存
缓存锁 — 是指内存区域如果被缓存在处理器的缓存行中,并且在 Lock 操作期间被锁定,那么当它执行锁操作回写内存时,处理器不在总线上声言 LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存数据时,会使缓存行无效;
3、锁分类
公平锁与非公平锁
公平锁与非公平锁
可重入锁
独享锁/互斥锁 共享锁 读写锁
乐观锁和悲观锁
分段锁
自旋锁
五、异步并发分布式编程框架 Akka
六、文件和硬盘 I/O
1、文件存储系统
B+树与 LSM 树
数据库存储系统主要用 B+树
LSM 树
2、文件控制块
定义
文件系统将硬盘空间以块为单位进行划分,每个文件占据若干个快,然后再通过一个文件控制块 FCB 记录每个文件占据的硬盘数据块。每块大小为 4K
结构 — Linux Inode 文件控制块
3、RAID 独立硬盘冗余阵列
文件存储的几个问题:
如何存储大文件
如果硬盘损坏,如何保证数据不丢失
更加高速的文件读写速度
通过对文件块的分片和冗余复制让提供读写能力的同时,又能提高文件的可用性
4、分布式文件系统 HDFS
NameNode 元数据的管理(文件名、副本数、权限等)
DataNode 以数据块为单位存储数据
评论