1,性能测试的开始点,
功能测试完成后,那功能测试完成的标志是什么呢,冻结代码库,即开发不再修改代码了。
2,性能测试是一个后验证的测试。
在测试中不会过早的考虑性能,先会看功能。
3,性能测试在哪里进行测试,在什么环境下
在性能测试环境中,能尽可能跟生产环境接近。因为出现性能问题的,是在生产环境中。
4,性能测试环境谁来维护
测试自己
5,性能环境谁来搭建
测试比较好。不会的话,可以学~
搭建测试环境,需要学:
(1)linux原理-线程 进程 cpu men io、
(2)操作系统与组成原理(计算机专业里的一门课)
(3)Linux操作
(4)docker
(5)数据库--数据库性能调优,
(6)中间件 Redis queue
(7)分布式 最终一致性 分布式事务
(8)负载均衡
(9)微服务,服务注册发现
(10)服务器
6,当服务器性能出现问题时,可以在上面10项中去找。
当然首先要了解项目的架构体系,没有架构,那就看中间件。
7,上面的内容了解后,后面就会是涉及到工具、脚本、执行、监控、报告
8,代码,python,学完了,再学java。学语言,不是去理解,先记住。
1209操作系统
一、
1,并发是宏观上在一段时间内能同时运行多个程序,并行是指同一时刻能运行多个指令。性能测试测并发,就是测试并发的效率
2,共享是指系统中的资源可以被多个并发进程共同使用。
有两种共享方式:互斥共享和同时共享。
互斥共享的资源成为临界资源,比如打印机,在同一时间只允许一个进程访问。
3,虚拟技术是把一个物理实体转化为多个逻辑实体。
主要有两种虚拟技术:时分复用技术和空分复用技术。
多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程占用处理器,每次只执行一小并快速切换。
4,虚拟内存(linux中的内存都是虚拟内存,虚拟内存是说不能直接访问物理内存)使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间和物理空间使用页进行交换,地址空间的页并不需要全部在物理内存中,当用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
并发使用的是时分复用技术,是虚拟的技术,是虚拟化的并发。
内存使用的是空分复用技术,内存是虚拟内存。
5,异步是指不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。
二、基本功能
1,进程管理
进程控制、进程同步、进程通信、死锁处理、处理机调度等。
2,内存管理
内存分配、地址映射、内存保护与共享、虚拟内存等。
3,文件管理
文件存储空间的管理、目录管理、文件读写管理和保护等。
4,设备管理
中断分类
cpu会涉及两种,软中断 si 和硬中断hi。
1,外中断
由CPU执行指令以外的事件引起,如I/O完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
2,异常
由CPU执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等
3,陷入
在用户程序中使用系统调用
问题:什么是硬中断、软终端
举例,敲击键盘,系统会迅速响应,但实际cpu一直忙碌中,还是会响应键盘操作,这个是硬中断。
软中断:
二、进程管理
1,进程
进程是cpu管理的基本模块。
如图,4个程序创建了4个进程,这4个进程可以并发的执行
屏幕快照 2019-01-17 19.49.10.png
这里是1个核的时候,这个是时分技术
2,线程
线程是独立调度的基本单位。
一个进程中可以有多个线程,他们共享进程资源。
3,区别
屏幕快照 2019-01-17 20.30.24.png
进程切换会导致线程切换,反过来,线程切换不会导致进程切换
c-context
s-switch
cs-上下文切换
连虚拟机后,命令 vmstat,就会看到cs
如果cs值比较大,可能就是系统调度出现了一些问题
经常切换,效率就不大高。
系统开销-创建或撤销进程时,系统都要为之分配或回收资源,所付出的开销远大于创建或撤销线程时的开销。进程切换开销大,线程切换开销小。
进程状态的切换
屏幕快照 2019-01-17 20.59.04.png
只有ready和running是可以互相转换的,其他都是单向转换
进程调度算法
不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法
1,批处理系统
FCFS-先来先服务-first-come-first-serverd
2,交互式系统
交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速的进行响应
1)时间片轮转
把进程按fcfs原则排成一队,队首的进程先执行,该时间片截止,该进程就放到队尾,这时执行队首的进程。
时间片太短,切换就比较频繁,时间就花费的比较多,时间太长,又保证不了进程的并发,有的就会比较卡。
2018
20190119-15分钟
··时间片轮转
如果那个进程一直放在哪里,自己没有操作,会依然给它时间片,在循环队列吗?
比如打开一个记事本,然后就不管它了,它会占时间片吗?
会。虽然后面什么都没做,但是最小化。也是有时间片,时间片比较小。
··优先级调度
为每个进程分配一个优先级,按照优先级进行调度
为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。
··多级反馈队列
一个进程需要执行100个时间片,如果采用的时间片轮转调度算法,那么需要交换100次。
连续执行多个时间片的进程。设置了多个队列,每个队列时间片大小都不同。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换7次。
每个队列的优先级不同,最上面的优先级最高。因此只有上一个队列没有进程的在排队,才能调度当前队列上的进程。
可将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。
实时系统
实时系统要求一个请求在一个确定时间内得到响应。
分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。
进程同步
1,临界区
对临界资源进行访问的那个代码成为临界区
为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。
2,同步与互斥
·同步:多个进程按一定顺序执行;
·互斥:多个进程在同一时刻只有一个进程能进入临界区。---例子:打印机
**使用信号量实现生产者-消费者问题
进程通信
进程同步与进程通信很容易混淆,他们的区别在于:
·进程同步:控制多个进程按一定顺序执行;
·进程通信:进程间传输信息。
进程通信是一种手段,进程同步是一种目的。为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。
1,管道
2,FIFO
3,消息队列
比如,发邮件--注册用户都发密码到邮箱,就相当于并行的处理变成了串行的操作,降低处理器的压力
4,信号量
5,共享存储
死锁
内存管理
虚拟内存
虚拟内存。不同于物理内存。
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
为了更好的管理内存,操作系统将内存抽象成地址空间,这个地址空间被分割成多个小块,每一块成为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存内,当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。
虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。
分页系统地址映射
内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。
一个虚拟地址分为2部分,一部分存储页面号,一部分存储偏移量。
页面置换算法
在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘兑换区中来腾出空间。
屏幕快照 2019-01-19 21.03.45.png
内存-掉电了就擦出了
硬盘-关了电脑还存在
持久化就是要求掉电了还存在,存到数据库和磁盘都可以。
访问速度上,访问内存要快于硬盘
置换算法,就是把数据从内存转移到磁盘,这个过程尽可能少的进行。
1,最佳
换出去的是最长时间不被访问的内存
2,最近最久未使用
LRU Least Recently Used
LRU是将过去最久未使用的页面换出
因为每次访问都需要更新链表,所以这种方式实现代价很高。
3,最近未使用
4,先进先出
5,第二次算法
6,时钟
磁盘结构
磁盘调度算法
磁盘调度的主要目标是使磁盘的平均寻道时间最短
磁道:圆弧。
1,先来先服务
这个公平,但未做优化
2,最短寻道时间优先
3,电梯算法
20190120
服务降级
例子:淘宝,平时搜索是搜全站,高峰期,搜店铺或者有些品类不给搜。
因为搜全站对系统消耗比较大。对系统来说,80%的功能不是特别重要的功能,20%才是核心的功能。高峰期先把80%的功能给干掉,减少资源消耗,然后资源投入到最核心的20%中去。
例子2,订单,平时可以马上看到,高峰时,就过一阵发个通知才能看到。
削峰
把瞬时流量的处理时间拉长
例如,业务上--12306把所有的票一次都放出来,网站可能夸了,
一段时间一段时间放,一个地方一个地方的放
例子2,技术上--订单秒杀,同一时间下单,做一个队列,让他们放到一个队列,一个个的处理
限流
熔断
模块a调b,发现b给挂了,就不调用b了,如果是图片,这个图片就显示为空白图片。
系统架构的知识:
服务是分层的,最往下最接近底部。
最下面:持久化-DB
然后上面是Cache
然后中间件
最上面是接入层
越往下资源越宝贵,访问速度越快。
例子:秒杀,抢购。真正下单的用户100/100000,不可能都会去写入数据库,会想办法在接入层给挡住。
写的层次越多,挡住的越多,对DB和Cache的访问就越少。
网友评论