架构训练营 -week7- 学习总结 - 性能测试,操作系统,锁
性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
不同视角下:
主观视角:用户感受到的性能
客观视角:性能指标衡量的性能
性能测试指标
主要指标:
响应时间
并发数
吞吐量
性能计数器等。
重点内容:响应时间、并发数、吞吐量的关系
注意不同阶段的响应时间、并发数、吞吐量是如何变化、原因。
个人理解如下:
随着并发压力增加,吞吐量会先升高,达到峰值后会逐步降低,如果负载过高可能导致系统崩溃、那此时的吞吐量就会是0。相应的,根据上面公式可以看出,吞吐量一定的时候,并发数增加,分给单个线程的资源变少,会导致系统响应时间变长,如果并发过高、系统崩溃,那此时的响应时间就是无限了~.~
原因:
在并发数较低时,系统负载能力要高于当前并发数量,资源比较充足,此时并发数逐渐增加,系统仍能迅速处理,因而吞吐量会逐步增大,此时响应时间不会有太大变化,但由于资源逐步紧缺,响应时间会有缓慢增加的趋势;
当并发数到达一定数量、超过系统负载能力,此时系统吞吐量到达最大值,并发数继续增大时,吞吐量不会有明显变化,但响应时间开始明显增加;
一旦并发数超过某个阈值,将导致系统崩溃,无法及时处理用户请求,导致服务雪崩,性能急剧下降,吞吐量下降,响应时间快速上升。
####
性能测试方法
具体可细分为:
性能测试
负载测试
压力测试
稳定性测试
全链路压测
全链路压测其实指的就是在特定的业务场景下,将相关的链路完整的串联起来同时施压,尽可能模拟出真实的用户行为,当系统整站流量都被打上来的时候,必定会暴露出性能瓶颈,才能够探测出系统整体的真实处理能力,以及有指导的在大促前进行容量规划和性能优化,这便是线上实施全链路压测的真正目的。
全链路压测的挑战
数据构造:压测数据怎么构造?如何确保压测流量能走完所有流程、没有死角?
数据隔离:在线上真实环境模拟时,如何确保对线上无影响?
流量构造:如何模拟线上请求?大促所带来的巨大流量怎样制作出来?
数据构造
个人理解:
线上用户数据记录日志,日志导出,经过筛选、脱敏等步骤,作为压测基础数据,然后结合BI提供的数据,通过数据构造平台生成压测数据,然后流量平台读取这些压测数据,生成相应的模拟请求。
数据隔离
逻辑隔离
虚拟隔离
物理隔离
流量构造
示例:天猫双十一全链路压测的流量平台
master+slave 结构
master:负责的整个平台的运转控制、命令发送、数据收集、决策等。
slave:部署在全球各地的 cdn 节点上,从而模拟从全球各地过来的用户请求。
性能优化
两个基本原则
你不能优化一个没有测试的软件
你不能优化一个你不了解的软件
性能测试主要指标
响应时间
并发数
吞吐量
性能计数器
性能优化的一般方法
性能测试,获得性能指标
指标分析,发现性能与资源瓶颈点
架构与代码分析,寻找性能与资源瓶颈关键所在
架构与代码优化,优化关键技术点,平衡资源利用
性能测试,进入性能优化闭环
系统性能优化的分层思想
机房与骨干网络性能优化
服务器与硬件性能优化
操作系统性能优化
虚拟机性能优化
基础组件性能优化
软件架构性能优化
软件代码性能优化
操作系统
CPU核数有限,如何支持并发处理多任务?
进程分时执行,CPU时间片
进程的运行期状态
运行
就绪
阻塞
进程与线程
太简单了,此处掠过。
线程栈
此处实际上说的是基于栈的计算模型,JVM内部就是这样。
线程安全
临界区
阻塞导致高并发系统崩溃
阻塞导致线程既不能继续执行,也不能释放资源。进而导致资源耗尽。最终导致系统崩溃。
此处可以延伸的知识:分布式系统中:服务超时可能导致服务雪崩。
避免服务雪崩:熔断、降级、限流
线上可选用的框架:Hystrix, Sentinel
避免阻塞引起的崩溃
限流:控制进入计算机的请求数,进而减少创建的线程数。
降级:关闭部分功能程序的执行,尽早释放线程。
反应式:异步;无临界区(Actor 模型)
锁
CAS
CAS 是一种系统原语,原语的执行必须是连续的,在执行过程中不允许被中断
Java通过CAS原语在对象头中修改Mark Word实现加锁。
偏向锁 轻量级锁 重量级锁
偏向锁:指一段同步代码一直被一个线程所访问,那么该线程会自动获取锁,降低获取锁的代价
轻量级锁:指当锁是偏向锁时,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提高性能
重量级锁:指当锁是轻量级锁时,另一个线程虽然自旋,但自旋不会一直持续下去,当自旋到一定次数时,还没获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁会让其他申请的线程进入阻塞,性能降低
延伸知识
硬件层面是通过缓存一致性协议、或是总线锁机制来实现锁。
各种锁
公平锁与非公平锁
可重入锁
独享锁/互斥锁/排它锁:一次只能被一个线程持有 共享锁:可以被多个线程持有
读写锁
乐观锁与悲观锁
分段锁
自旋锁
版权声明: 本文为 InfoQ 作者【于成龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/209fe83486dc09c5d2168eab6】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论