第 07 周 优化系统性能 -01 学习总结

发布于: 5 小时前
第07周 优化系统性能-01 学习总结

性能测试

  1. 性能测试的不同视角

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

  1. 性能核心指标

- 主要指标

- 响应时间

- 并发数 : 同时提交请求到服务器处理的数目

- 吞吐量 : 单位时间内系统处理的请求的数量

- TPS : 每秒事务数

- HPS : 每秒HTTP请求数

- QPS : 每秒查询数

- 性能计数器

- System Load : 当前正在执行的线程数 + 等待处理的线程数

- 等于cpu核数 刚好

- 线程数

- 进程数

- 磁盘

- IO

  1. 性能指标之间的关系

- 吞吐量 = (1000 / 响应时间ms) * 并发数

  1. 性能测试方法

- 性能测试

- 正常情况系统负载情况

- 负载测试

- 最大承受能力

- 压力测试

- 崩溃点在哪里

- 稳定性测试

- 运行一段时间检测系统是否稳定

性能优化

  1. 优化的两个基本原则

- 你不能优化一个没有测试的软件

- 你不能优化一个你不了解的软件

  1. 性能优化的一般方法

- 性能测试,获得性能指标

- 指标分析,发现性能与资源瓶颈点

- 架构与代码分析,寻找性能与资源瓶颈关键所在

- 架构与代码优化,优化关键技术点,平衡资源利用

- 性能测试,进入性能优化闭环

  1. 性能优化方法

- 找问题点

- 采用什么技术来解决

- 解决过程中又有什么样的问题

  1. 系统性能优化的分层思想

- 机房与骨干网络性能优化

- 异地多活的多机房架构

- 专线网络与自主CDN建设

- 服务器与硬件性能优化

- 使用更优的CPU,磁盘,内存,网卡,对软件的性能优化可能是数量级的,有时候远远超过代码和架构的性能优化。

- 操作系统性能优化

- 资源利用分析,发现大量CPU操作为sys类型,消耗大量计算资源。

- 调查发现,起因是部分 Linux版本缺省情况打开 tranparent huge page导致

- 优化方案:关闭 transparent huge page

- 虚拟机性能优化

- FULL GC

- 基础组件性能优化

- 更换性能更好的组件

- 更新稳定版

- 软件架构性能优化

- 缓存

- 异步

- 集群

- 软件代码性能优化

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

- 并发编程,多线程与锁

- 资源复用,线程池与对象池

- 异步编程,生产者消费者

- 数据结构,数组、链表、hash表、树

操作系统

  1. 程序运行时架构

- 进程

- 线程

  1. 操作系统多任务运行环境

- 进程分时执行

  1. 进程运行期状态

- 运行

- 就绪

- 阻塞

  1. 进程 VS 线程

  1. Java Web 应用多线程运行时视图

  1. 线程安全问题

- 当某些代码修改內存堆(进程共享內存)里的数据的时候,如果有多个线程在同时执行就可能会出现同时修改数据的情况,

- 比如,两个线程同时对一个堆中的数据执行+1操作,最终这个数据只会被加一次,这就是人们常说的线程安全问题,实际上线程的结果应该是依次加一,即最终的结果应该是+2

  1. 临界区

  • 多个线程访问共享资源的这段代码被称为临界区

```

lock.lock(); //线程获得锁

i++; //临界区代码,i位于堆中

lock.unlock(); //线程释放锁

```

  • 解决线程安全问题的主要方法是使用锁

- 将临界区的代码加锁,只有获得锁的线程才能执行临界区代码.

  1. 阻塞导致高并发系统崩溃

- 锁(IO)会引起线程阻塞。

- 阻塞导致线程既不能继续执行,也不能释放资源。

- 进而导致资源耗尽。最终导致系统崩溃。

  1. 避免阻塞引起的崩溃

- 限流:控制进入计算机的请求数,进而减少创建的线程数。

- 降级:关闭部分功能程序的执行,尽早释放线程。

- 反应式:异步;无临界区( Actor模型)

- 公平锁 与 非公平锁

- 可重入锁

- 独享锁/互斥锁 共享锁 读写锁

- 乐观锁 悲观锁

- 分段锁

- 自旋锁

  1. akka 的特性

- 垂直伸缩,水平伸缩

- 并发

- 分布式

- 容错能力

- 简单的单一模型

  1. 核心 Actor

- 行为

- 状态

  1. HiMeter 性能分析框架

硬盘

  1. 硬盘

  • 机械硬盘

  • 固态硬盘

  1. B+ 与 LSM 树

  1. 文件控制

文件系统将硬盘空间以块为单位进行划分,每个文件占据若干个块然后再通过一个文件控制块FCB记录每个文件占据的硬盘数据块。

  1. Linux Inode文件控制块

- inode中记录着文件权限、所有者、修改时间和文件 大小等文件属性信息及文件数据块硬盘地址索

- inode是固定结构的,能够记录的硬盘地址索引数也是固定的,只有15个索引

- 每个 inode最多可以存储12+256+256256+2562 56256个数据块,如果每个数据块的大小为4k 也就是单个文件最大不超过70G。

  1. 大文件存储的几个问题?

- 如何存储大文件?

- 文件高可用?

- 文件高速读写?

  1. RAID 独立硬盘冗余阵列

- RAID 0

- 多块硬盘,数据分成多块同时写.

- 性能提高可用性降低容易损坏

- RAID 1

- RAID 10

- RAID 5(常用)

- RAID 6

  1. 分布式文件系统HDFS

- 角色

- NameNode 元数据

- DataNodes 存储数据

用户头像

Jaye

关注

还未添加个人签名 2018.01.23 加入

还未添加个人简介

评论

发布
暂无评论
第07周 优化系统性能-01 学习总结