第七周作业总结
本周主要学习内容:
性能测试的指标:响应时间、并发数、吞吐量、性能计数器
性能测试是性能优化的前提,也是性能优化结果的检查和度量标准。不同视角下的性能优化有不同的标准,也有不同的优化手段。
主观视角:用户感受到的性能
客观视角:性能指标衡量的性能
性能测试指标
1) 响应时间:响应时间是指应用系统从发出请求开始到收到最后响应数据所需要的时间。
2)并发数:并发数是指系统能够同时处理请求的数目,这个数字也反映了系统的负载特性。处理并发用户数,还存在着在线用户数和系统用户数。
3)吞吐量:吞吐量是指单位时间内系统处理的请求的数量,体现系统的处理能力。对于网站,可以用“请求数/秒”或是“页面数/秒”来衡量,也可以用“访问人数/天”或是“处理的业务数/小时”等来衡量。可以使用 TPS 和 QPS 等指标,吞吐量=(1000/响应时间ms)*并发数
4)性能计数器:性能计数器是描述服务器或操作系统性能的一些数据指标。包括System Load(使用top指令查看)、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标。
性能测试方法:性能测试、负载测试、压力测试、稳定性测试
1) 性能测试 以系统初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期
2) 负载测试 对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值,如某种资源已经呈饱和状态,这时候继续对系统施加压力,系统的处理能力不但不能提高,反而会下降。
3) 压力测试 超过安全负载的情况下,对系统继续施加压力,直到系统奔溃或不能再处理任何请求,以此获得系统最大压力承受能力。
4)稳定性测试 被测试系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。在生产环境,请求压力是不均匀的,呈波浪特性,因此为了更好地模拟生产环境,稳定性测试也应不均匀地对系统施加压力。
全链路压测相关介绍
如何给予性能指标和性能测试进行性能优化
性能优化的两个基本原则
1)不能优化一个没有测试的软件
2)不能优化一个不了解的软件
性能优化的一般方法
1)通过性能测试,获取性能指标
2)指标分析,发现性能与资源的瓶颈点
3)架构与代码分析,寻找性能与资源瓶颈的关键所在
4)架构与代码优化,优化关键技术点,平衡资源利用
5)性能测试,进入性能优化闭环
系统性能优化的分层思想
1)机房与骨干网络性能优化
异地多活的多机房架构,部署多个数据中心,提供就近访问,主要解决高可用问题,也解决一些性能问题
专线网络与自主CDN建设
2)服务器与硬件性能优化(垂直伸缩可以提升)
使用更优的CPU、磁盘、内存、网卡,对软件的性能优化可能是数量级的,有时候远超代码和架构的性能优化。
3)操作系统优化(操作系统的参数等)
4)虚拟机优化(JVM参数调整)
5)基础组件优化(Tomcat)
6)软件架构优化(分布式架构)
7)软件代码性能优化
5.操作系统
程序运行时架构
1) 程序是静态的
2) 程序运行起来以后,被称为进程
进程 vs 线程
不同进程轮流在CPU上执行,每次都要进行进程间CPU切换,代价非常大。因此服务器应用通常是单进程多线程。
进程从操作系统获取基本的内存空间,所有的线程共享进程的内存地址空间。而每个线程也会拥有自己私有的内存地址范围,其它线程不能访问。
锁
锁原语CAS(Compare And Swap)
CAS(V,E,N):V表示要更新的变量,E表示预期值,N表示最新值。在执行时,如果V等于E,则将V的值改成N,如果不相等则什么都不做。
CAS是一种系统原语,原语的执行过程必须是连续的,不允许被中断。
锁的类型
1) 公平锁/非公平锁
公平锁是指按照申请时间先后来获得锁
非公平锁是指随机获取锁,和申请时间无关
2) 可重入锁
当当前线程已经获得该锁,可以再次或多次获取相同的锁,避免造成死锁。
3) 独享锁/互斥锁
该锁只能被一个线程持有
4) 共享锁
该锁可以被多个线程持有
5) 读写锁
读不需要锁,写需要锁
6) 悲观锁
认为每次操作都会发生修改,所以都会加锁。先加锁后修改
7)乐观锁
认为每次操作都可以修改成功,如果发生数据修改失败(类似CAS),则放弃。
评论