测试面试之性能

本文详细介绍了性能测试的关键概念和实践,包括内存泄漏、响应时间、系统架构、数据库等方面。从浏览器输入网址到页面渲染的响应时间分解,展示了性能测试中的负载测试、压力测试和容量测试等多个测试类型。文章强调了不同角色(客户、开发、系统架构和测试人员)关注的性能要点,并探讨了性能瓶颈的识别和调优策略。此外,还涉及了JMeter工具的使用,如定时器、监听器、断言、预处理器和后置处理器等,并讨论了分布式压测的原理和实施。

什么是内存泄露?
内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能回收它们,因为它们正在被引用。对于长时间运行的程序来说,内存泄漏会使程序占用的内存一直增加,最后就会出现内存耗尽而导致宕机,即使不宕机也会是系统的运行越来越慢,还有就是内存有其他资源,比如数据库连接,网络连接等等。
打开浏览器输入网址到页面渲染,响应时间通常可以细分为哪些?
从客户端到服务端的请求时间(请求网络传输时间 Request);
从服务端返回数据到客户端的时间(响应网络传输时间 Response);
页面渲染时间(客户端浏览器加载页面的时间);
处理器的处理时间(应用服务器+数据库服务器处理时间);
你认为不同角色关注的软件性能要点分别是?
客户:重点关注打开速度及响应时间;
在进行操作时,每个请求之间的间隔时间;
大量用户在同一时刻在软件系统上操作是否有较好的体验;
开发人员:重点关注响应时间和数据库交互,进行性能调优;
系统架构:架构设计是否合理;
数据库设计:数据库设计是否存在问题;
代码:代码是否存在性能方面的问题,系统中是否有不合理的内存使用方式;
业务逻辑:系统中是否存在不合理的线程同步方式,系统中是否存在不合理的资源竞争;
测试人员:重点关注用户感受到的软件性能;
系统的响应时间;
系统状态的相关信息,如:CPU、内存、应用服务器状态、JVM 可用内存、数据库的状态等;
系统的可扩展性,处理并发的能力;
系统可能的最大容量,可能的性能瓶颈,通过更换哪些设备或是进行哪些扩展能够提高系统性能;
长时间运行是否足够稳定,是否能够不间断的提供业务服务等;
性能测试包含了哪些测试类型?
负载测试(Load Testing):测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,保持配置不变的情况下,最大支持多少并发用户数,软件请求出错率等;
压力测试(Stress Testing):压力测试也称为强度测试,主要测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的 CPU 利用率,内存使用率,磁盘 I/O 吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同;
容量测试(Volume Testing):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等;
并发测试(Concurrent Testing): 测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题;
基准测试(BenchmarkTesting):比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能;
解释常用的性能指标名称与具体含义?
性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。
性能指标分为两个方面:
系统指标:与用户场景和需求相关指标;
资源指标:与硬件资源消耗相关指标;
系统指标:
响应时间:即系统响应时间(Transaction Response Time),应用系统从发出请求到客户端接收到响应所消耗的时间,是用户视角最关心的软件性能业务体验。响应时间为网络响应时间与应用程序响应时间之和;
一般响应时间在 2s 内,用户会感觉比较满意;
在 2s~5s 之间,用户勉强能接受;
大于 8s,用户就可能无法接受,从而刷新页面或者离开;
平均响应时间:所有请求花费的平均时间;
吞吐量:单位时间内系统能够处理的客户请求的数量,直接体现软件系统的性能承载能力,计算方式是完成的事务数除以时间;
并发用户数:并发主要是针对服务器而言,在同一时刻与服务器进行交互(指向服务器发出请求)的在线用户数;
在线用户数:某段时间内,用户访问系统的用户数,如多个用户在浏览网页,但没有对同时对服务器进行数据请求,需要与并发用户数区分开;
最大并发用户数:有两种理解方式一种是从业务的角度来模拟真实的用户访问,体现的是业务并发用户数,指在同一时间段内访问系统的用户数量。另一种是从服务器端承受的压力来考虑,这里的“并发用户数”指的是同时向服务器端发出请求的客户数,一般结合并发测试(Concurrency Testing)使用,体现的是服务端承受的最大并发访问数;
事务:可以看作是一个动作或是一系列动作的集合,例如登录,从登录开始到登录结束为一个事务。
TPS:Transaction per second,每秒钟系统能够处理的交易或者事务的数量,即服务器对客户请求的能力,是衡量系统处理能力的重要指标。
吞吐量:网络传输的数据量(处理客户的请求数);
吞吐率:单位时间(可以是秒/分/时/天)内网络成功传输的数据量,如请求数/秒、页面数/秒;
点击数:Web Server 收到的 HTTP 请求数;
点击率:HPS,每秒钟用户向 Web Server 提交的 HTTP 请求数;
资源指标:
硬件性能指标:CPU,内存 Memory,磁盘 I/O(Disk I/O),网络 I/O(Network I/O) ;
中间件:常用的中间件如 web 服务器 Tomcat,Weblogic web 服务器,JVM(java 虚拟机),ThreadPool 线程池,JDBC 数据驱动 ;
数据库指标:SQL,吞吐量,缓存命中率,连接数等;
JVM:Java 虚拟机,为使 java 的代码可以编译运行在不同的平台上顺畅,仿真模拟各种计算机来实现;
前端指标:首次显示时间,页面数量,页面大小,网络 startRender,firstRender 等。前端的性能与后端的性能的不同点在于,前端是每个用户的直观的感受,如前端页面加载元素耗费的时间,而后端的性能关注点在于多用户使用系统时,服务器是否能够承受或者服务器的处理能力如何,能否以较好的响应时间响应;
Load:系统平均负载,特定时间间隔内运行进程数,Load 与 cpu 核数一致;
有验证码或加密的功能,怎么做性能测试?
将验证码或加密暂时屏蔽,完成性能测试后,再恢复。注意:屏蔽验证码是不会给性能测试的结果带来影响的。
使用一个万能的验证码。
在做性能测试时,服务器返回 http 500?
运行的用户数过多,对服务器造成的压力过大,服务器无法响应。减小用户数或者场景持续时间,问题得到解决。
该做关联的地方没有去做关联。进行手工或者自动关联,问题得到解决。
录制时请求的页面、图片等,在回放的时候服务器找不到,若该页面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。
参数化时的取值有问题。可将参数化列表中的数值,拿到实际应用系统中进行测试,可排除问题。
更换了应用服务器(中间件的更换,如 tomcat、websphere、jboss 等),还是利用原先录制的脚本去运行,则很可能报 HTTP500 错误。因为各种应用服务器处理的机制不一样,所录制的脚本也不一样,解决办法只有重新录制脚本。
Windows xp2 与 ISS 组件不兼容,则有可能导致 HTTP500 错误。对 ISS 组件进行调整后问题解决。
系统开发程序写的有问题。例如有些指针问题没有处理好的,有空指针情况的存在。修改程序后问题解决。
启动方式。是多线程。还是多进程。一般多线程的容易出现 500 错误。
CPU 使用率不达标?
首先使用 top 命令,查看 cpu 进程占用情况,如
ps -ef | grep java
查看占用 cpu 过高的 pid 是哪个服务,找到对应的服务后,分析是哪个模块,那个接口此时正在调用,导致CPU 过高,然后跟开发一起讨论,提出优化建议;
响应时间不达标?
响应时间不达标的话,我们会根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。
性能测试如何判断网络瓶颈?
确定本次压测链路上网络流量上限值是多少
在压测之前,提前确定本地压测的数据流向,即压测请求从压力机上发出后,经过了哪些环节,最终到达服务器上。响应数据经过哪些环节,又返回到压力机。
并且每个环节中的网络上限是多少,最终我们整个网络环路的流量上限,就取决于环路中最低的那个上限值(木桶原理)。网络请求数据首先是从压力机的网卡发出,一般的网卡都是千兆网卡,然后网络带宽也会有限制,比如是 100Mb,可能还会经过一些网络设备,如路由器、交换机、防火墙等,这些设备也都有网络上限,假如都是 10000Mb,最后到达目标服务器的网卡(千兆网卡)。
整体链路如果最高支持 100Mb 的数据流量,大约是 100/8=12.5MB(1 字节=8 位)。如果在局域网内,几乎就不用考虑带宽和网络设备的问题了,所以局域网内网卡的上限就是整个链路的网络上限。
2.压测过程中,当前网络上的流量大小是多少
一般在目标服务器上,通过一些工具对网络进行监控,如 nmon、dstat、sar、nload 等,可以查看到实时的网络数据。按照上面的分析,假如通过监控 Linux 服务器,发现服务器的网卡流量已经达到 12.5MB 左右,那么就说明当前网络链路上的流量已经达到上限了。当前网络已经出现了瓶颈。
那些功能需要做性能测试?
1.选取操作频率非常高的功能;
2.关键程度非常高的功能;
3.资源占用非常严重的功能;
如何确定最大用户并发数?
使用性能测试的梯度模式,逐渐增加用户数,这个时候压力会越来越大,当TPS增长率小于响应时间的增长率时,这就是性能的拐点,这就是最合理的并发用户数;
当TPS 不再增长或下降时,这个时候压力就是最大的压力,所使用的并发用户数就是最大的用户数,如果此时的TPS 不满足你的要求,那么就要寻找性能瓶颈来优化;
哪些现象说明了IO瓶颈?
await:io等待时间,队列时间+io处理时间
svctm:平均io的时间
await-svctm:得到的是io队列时间,差值越大,表示io处理效率越低
%util:io的使用百分比,越高表示磁盘越繁忙
吞吐量大幅度波动有哪些原因?
内存不足
tomcat连接数不够
网卡队列不够
线程过多
针对大并发压力测试,主要是从哪几个方面去考虑点?
考虑并发用户数的设计
考虑测试场景
考虑服务端的资源
考虑网络环境(内网还是外网)
机器是否足够,是否需要分布式压测
如何识别系统瓶颈?
从TPS指标分析,TPS即系统单位时间内处理事务的数量。观察当前随着用户数的增长期系统每秒可处理的事务数是否也会增长;
如何确定系统最大负载?
通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数。
性能调优的方法?
(1)空间换时间,内存、缓存就是典型的空间换时间的例子。利用内存缓存从磁盘上取 出的数据,CPU 请求数据直接从内存中获取,从而获取比从磁盘读取数据更高的效率。
(2)时间换空间,当空间成为瓶颈时,切分数据分批次处理,用更少的空间完成任务处 理。上传大附件时经常用这种方式。
(3)分而治之,把任务切分,分开执行,也方便并行执行来提高效率,Hadoop 中的 HDFS、 mapreduce 都是这个原理。
(4)异步处理,业务链路上有任务时间消耗较长,可以拆分业务,减少阻塞影响。常见 的异步处理机制有 MQ(消息队列),目前在互联网应用中大量使用。
(5)并行,用多个进程或者线程同时处理业务,缩短业务处理时间,比如我们在银行办 业务时,如果排队人数较多时,银行会加开柜台。
(6)离用户更近一点,比如 CDN 技术,把用户请求的静态资源放在离用户更近的地方。
(7)一切可扩展,业务模块化、服务化(同时无状态化)、良好的水平扩展能力。
如何识别性能瓶颈?
tps下降?
响应时间上升?
负载越来越高,响应时间越来越长,tps没有变化?
随着负载升高,tps却不变,意味着单线程的tps是越来越低的。。。
总的tps/线程数=性能瓶颈点
Transaction Throughput vs Threads
系统性能分析思路?
(1)CPU 利用率;
(2)内存利用率;
(3)磁盘I/O的利用率和延迟;
(4)网络利用率;
定时器?
Jmeter 中的定时器一般被我们用来设置延迟与同步,定时器的执行优先级高于Sampler(取样器)在同一作用域(比如控制器下)下有多个定时器存在时,每一个定时器都会执行;如果想让某一定时器仅针对某一Sampler 有效,则可以把定时器加载此Sampler节点下;
举例说明jmeter的定时器用法?
固定定时器:模拟用户思考时间
rps定时器:控制每秒请求数
tps定时器:控制每秒吞吐量
Login Config Element?
该元件用来配置默认的用户和密码,有些Sampler(取样器)要验证用户名和密码;如果Sampler中没有配置用户名和密码,那么会自动用Login Config Element中的配置来填充;
逻辑控制器?
Jmeter 逻辑控制器可以对元件的逻辑进行控制,除仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器;
17种控制大致分为两种:
1.控制测试计划执行过程中节点的逻辑执行顺序:eg:Loop Controller(循环控制器),if Controller(if 控制器)
2.对测试计划中的脚本进行分组,方便JMeter统计执行结果及进行脚本的运行时控制等,eg:Throughput Controller(吞吐量控制器),Transction Controller(事务控制器)等;
循环控制器(loop Controller):指定其子节点运行的次数,可以使用具体的数值,也可是设置为变量;
简单控制器(Simple Controller):简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来命名某些操作
遍历循环控制器(ForEach Controller)
包含控制器(Include Controller):用于引用外部的Jmx文件;从而控制多个测试计划组合
临界区控制器(critical section Controller):临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)
生命周期/运行周期控制器(Runtime Controller):用于控制该控制器下的取样器/控制器的运行时间
仅一次控制器(once only controller):在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行
转换控制器(Switch Controller):Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。
当/判断控制器(While Controller):运行其子节点下的取样器/控制器,直到条件为“假”
事务控制器(transaction controller):生成一个额外的采样器来测量其下测试元素的总体时间;值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的
IF控制器(If Controller)
条件(默认JavaScript)(Condition(default javascript)):使用JavaScript的函数或变量进行评估判断条件为真或假
条件解释为变量表达式(interpret condition as variable expression):如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript
对所有子条件执行(evaluate for all children):如果勾选该项,则该controller在没一个子节点执行时执行一次;
默认情况下,该控制器可以对包含在其下面的所有可运行的元素进行执行,但只在入口执行一次
吞吐量控制器(Throughput Controller):控制其下的子节点的执行次数与负载比例分配;
Interleave Controller 交替控制器:假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序
随机控制器(Random Controller):类似交替控制器,但该控制器随机选取某一个取样器请求并执行
随机顺序控制器(Random Order Controller):随机执行其下的所有子结点.· 与Random Controller不同的是,这个控制器会先将需要随机的内容均执行一遍,但次序不定
录制控制器(Recording Controller):类似代理服务器的作用,在测试执行期间记录测试样本
模块控制器(Module Controller):测试控制器子节点下的某一个模块,而不是整个测试计划
Jmeter 函数助手?
函数助手帮助我们生成数据:
_BeanShell
_ChangeCase 修改字符串大小写
_char 把一组数字转化成Unicode 字符
_counter 作为一个计数器使用,支持多线程(多用户)
_CSVRead 从文件读取指定的列
_dataTimeConvert 格式化参数
_digest 加密
_escapeHtml 字符转成Html的字符,这样编码后传给浏览器,浏览器就能识别了
_escapeOroRegexChars 把正则表达式转换成Java 正则引擎能识别的表达式
_escapeXml 把字符串转换成xml格式的字符
_eval 返回一个表达式的值,可以用此函数表达式来嵌套引用表达式
_evalVar 返回一个表达式的结果,存到一个变量中,供使用
_fileToString 读取文件保存至变量汇总
_groovy 执行Apache Groovy 脚本,并返回结果
_intSum 整数求和,多个数字用逗号隔开
_idPropDefined 判断属性是否存在
_isVarDefined 判断变量是否存在
_javaScript 返回js执行结果
_jexl2 返回jexl 表达式执行结果
_jexl3 返回jexl3表达式执行结果
_log 日志方法,返回输入的字符串信息
_logn 与_log 类似,不过它只记录一条日志,不返回值
__longSum 计算长整型的和
__machineIP 引用返回本机IP
__machineName 引用返回本机Name
__P 获取命令行中定义的属性,非GUI方式运行测试计划时这个函数可用来做参数化,由运行命令动态指定参数值,方便与Jenkins等集成完成性能测试工作
__property 获取Jmeter的属性,%JMETER_HOME%\bin\jmeter.properties
__Random 生成指定范围内的随机数
__RandomDate 生成指定范围内的日期
_RandomFromMultipleVars 给定的多个值中随机取值
__RandomString 生成指定长度的字符串
__regexFunction 提取正则表达式
__samplerName 获取当前按sampler的名称
__setProperty 动态设置jmeter属性
__split 拆分字符串
__StringFromFile 从文件中读取内容,一行一行的读取,读完再从头开始
__TestPlanName 获取测试计划名称
__threadNum 返回当前线程号
__time 返回当前时间,可指定返回格式,由SimpleDateFormat类处理函数格式
__unescape 反转escape字符
__unescapeHtml 反转URL连接中的Unicode编码字符
__urldecode decode application/x-www-form-urlencoded字符串
__UUID 获取UUID
__V 获取含变量名的表达式
__XPath 根据xpath获取xml节点内容,没有匹配到,则返回空字符串
CSV Data Set Config?
CSV Data Set Config 指从执行的文件中一行一行的提取内容,根据分隔符拆解一行内容与变量名对应上,然后这些变量就可以供取样器引用了;
解释什么是预处理器元件?列出一些预处理器元件?
预处理器是在采样器执行之前发生的事情。为了在采样器之前进行配置,或者用于更新响应文本中提取的变量,需要使用预处理器元件。
元件:用户参数;
正则表达式用户参数;
取样器超时;
HTTP url 重写修饰符;
HTTP 用户参数修饰符;
HTML 链接解释器l
BeanShell PreProcessor;
解释什么是后置处理器?
要在发出请求后执行任何操作,则使用后置处理器,。eg:参数关联,提取参数等;
元件:BeanShell 后置处理器,JDBC 后置处理器,JSON 提取器;正则表达式提取器;
Jmeter 为性能测试提供什么好处?
它可以用于测试静态资源和动态资源的性能;
它可以测试网站最大并发用户数,从而分析网站瓶颈;
它提供了性能图形化分析;
什么是采样器(Samplers)和线程组(Thread group)?
采样器:采样器生成多个或一个采样结果,这些采样结果具有很多属性,例如经过时间,数据大小等。采样器允许Jmeter通过取样器将特定类型的请求发送到服务器,采样器包括HTTP请求,FTP请求,JDBC请求等;
线程组:对于任何测试计划,线程组元件都是Jmeter 的开始部分,可以设置多个用户和时间来加载线程组中给出的所有用户;
解释什么是配置元件?
配置元件与采样器并行工作.要设置默认值和变量供采样器以后使用,可以使用配置元件。执行顺序中先执行配置元件再执行取样器;eg:HTTP请求默认值,HTTP消息头管理器,HTTP Cookies 管理器;HTTP Cache 管理器;HTTP 请求默认值:解决qa,uat,prd环境切换更换端口,IP问题;
解决Cookie 问题?
eg:登录,充值问题:
方案1:在最外层加HTTP Cookie 管理器;
方案2:在登录接口下用后置处理器,JSON 提取器提取Token,在充值下面加HTTP Cookie 管理器或;
方案3:登录接口放在setup 线程组中,提取出cookie 置为全局变量;
Jmeter 如何做关联或全局参数?
1.拿到接口响应结果,用后置处理器的提取器拿到要关联的值,设置为变量;
2.把需要提供参数的接口放到setup 线程组,用提取器拿到值,设置为变量;
jmeter负载测试中怎么保持session会话?
对session唯一性有要求的接口
(1)脚本保存session,cookie管理器并发读取session。吞吐量相对较低
(2)正则提取保存为全局属性,cookie管理器并发读取session。吞吐量正常
怎么做参数化?
csv配置元件,循环读取参数
csv函数 只对线程生效,多线程读取
说明Jmeter中计时器是什么,计时器的类型是什么?
默认情况下,JMeter线程将连续发送请求而不会暂停;可以延迟线程发出请求的时间,解决服务器过载的问题,包括:恒定计时器,同步计时器,均匀随机计时器等;
什么是测试片段?
测试片段也是一种元件,例如“线程组”元件。唯一的区别是除非模块控制器或包含控制器引用了测试片段,否则不会实现测试片段。
列出JMeter 一些监听器?
集合报告,汇总报告,查看结果数,用表格查看结果,图形结果,BeanShell Listener,摘要报告等;
解释什么是JMeter?
Jmeter 是一款java 开源工具,用于性能负载测试,它旨在分析和衡量web应用程序和各种服务的性能和负载功能行为;
解释计时器(Timer)在JMter 中的作用是什么?
在计时器的帮助下,JMeter可以延迟线程发出的每个请求之间的时间,它可以解决服务器的过载问题;
解释什么是JMeter 中的断言?断言的类型有那些?
断言有助于验证被测服务器是否返回了预期结果。
JMeter中一些常用的断言是:
响应断言;持续时间断言;大小断言;XML断言;HTMl 断言;
Jmeter 中的处理器是什么?
预处理器,后置处理器;
说明Jmeter的工作原理?
jmeter 将一定数量的请求发送到目标服务器。收集来自目标服务器的响应及其他统计数据,这些统计数据通过图形或表格来显示应用程序或服务器的性能;
响应时间不达标怎么办?
查看事务消耗的时间是在网络传输还是服务器;
如果是网络:结合吞吐量Throughtput,计算宽带是否存在瓶颈,有瓶颈,增加宽带,对数据传输进行压缩处理,不存在瓶颈可能是网络不稳定导致的;
如果是服务器:查看web服务器和数据库服务器的cpu,内存的使用率是否过高,过高的cpu,会造成响应时间过长;把相对应的日志拉下来给对应的开发;
性能测试如何保障Jmeter 同时有100个用户在线?
可以在jmeter中使用同步定时器功能,同步定时器可以设置集合点,比如设置100,这样当达到100并发的时候,才会执行相应的接口请求。
事务的响应时间?
事务是指用户在客户端做一种或多种业务所做的操作集,事务的响应时间就是衡量用户执行这些操作集所花费的时间。在性能测试中,一般通过计算事务的开始时间和结束时间的差值来获取事务的响应时间。
一个事务表示一个“从用户发送请求->web server接受到请求,进行处理-> web server向DB获取数据->生成用户的object(页面),返回给用户”的过程,一般的响应时间都是针对事务而言的。
每秒点击数?
HPS每秒点击数是指每秒钟向web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
吞吐率?
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构等。
TPS?
TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
OPS?
OPS:每秒查询OPS是对一个特定的查询服务器在规定时间内所处理的流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量;
什么是性能测试?压力测试?负载测试?
从测试方法和工具来说,三者都是一样的;压力测试和负载测试是性能测试的子集;
性能测试:模拟用户负载来测试系统在负载情况下系统的响应时间,吞吐量等,目的是为了获取系统
的指标,判断是否满足生产性能的要求;
负载测试:在一定的软硬件环境下,不断地加大负载数来确定满足性能指标的情况下所能承受的最大用户数;目的是为了获取最大的用户数。
压力测试:也叫强度测试,在一定软硬件环境下,通过高负载的手段使服务器资源处于极限状态,测试系统在极限状态长时间运行是否稳定;
压测的时候,QPS一直上不去,你会怎么排查?
被测服务器的性能:看资源是否被打满,导致无法连接,被测服务器扩容;
被测接口:看接口是否,报错,响应时间是否变慢接口性能优化;
压测机器的性能:是不是网络IO占满,并发数量达不到,多台机器压测并发;
压测工具:看压测工具是否支持并发请求,采用多线程协助的方式并发请求;
JMeter为性能测试提供什么好处?
它可以用于测试静态资源和动态资源的性能;
它可用于测试网站主打并发用户数,从而分析定位网站瓶颈;
它提供了性能报告的图形化分析;
性能测试流程?
1.需求分析,分析系统的性能指标;
2.准备环境,包含工具,场景等一系列的性能测试相关需要;
3.准备脚本,脚本调优,获取数据。
5.判定指标是否满足要求。
<1>如果达标,还会继续进行进一步的性能测试;
测试系统的阈值,测试系统是否具备抗风险的能力;
<2>如果不达标,进入性诊断
6.性能诊断,分析性能瓶颈,吞吐量瓶颈,响应时间瓶颈,资源利用了率瓶颈;
CPU占比过高的分析:CPU中哪一个进程导致了cpu占比过高,再分析进程中哪一个线程占比过高,再分析线程中的内容是什么,代码的逻辑是否影响了性能过高;
通过系统架构的交互逻辑去判定:请求 --> 网关 --> 服务器 (mq -->中间键等 -->业务代码–数据库)
7.提供优化建议:
性能调优:吞吐量调优:中间键,jvm,网卡宽带;
硬件调优:cpu ,磁盘,IO,TCP 连接,内存等;
8.回归性能测试
9.编写测试报告
分布式压测?
普通压测:单台机器可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等;
分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问;
Jmeter 分布式压测的原理:
1.总控制机的节点master,其他生产压力的机器叫“肉鸡” server
2.master 会把压测脚本发到server 上面
3.执行的时候,server 上只需要把 jmeter-server 打开就可以了,不用启动jmeter
5.配置详情:master 配置肉鸡地址:jmeter-properties 中:remote_hosts= ip:端口,ip:端口,
server.rmi.ssl.disable=true 禁掉
6.jmx 文件不需要拷贝到slave 机器,csv 文件需要拷贝到slave 机器;
控制机?
  运行多台jmeter负载机进行性能测试时,被选中作为管理机的那台机器就是控制机。控制机也可以参与脚本的运行,同时它也担负管理远程负载机指挥远程负载机运行工作,且收集远程负载机运行测试结果。
负载机?
  负载机就是向被测应用服务发起负载(请求)的机器。控制机同时也是一台负载机。jmeter负载机受控制机(jmeter负载机)的管理。与支持其他远程运行的测试工具一样,负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机会把运行的脚本隐蔽的发送到远程负载机,但是运行的测试脚本有参数文件或者依赖jar包时,控制机并不能把他们发送到远程负载机,这种情况就需要手动拷贝,也可以用工具实现自动拷贝。
远程运行逻辑?
  远程负载机首先启动agent程序,待控制机连接;控制机连接上远程负载机;控制机发送指令(脚本及启动命令)启动线程;负载机运行脚本,回传状态(包括测试结果);控制机收集结果并显示
Jmeter 运行方式分为两种?
GUI,CLI;’
GUI窗口图形化界面运行;可视化,直观,方便控制测试计划启停,实时查看运行状况,比如测试结果,运行线程数等。但当大并发测试情况下,该方式往往会导致负载机资源紧张,对性能测试结果造成影响;
CLI:命令窗口运行
实际运行Jmeter 测试计划时,推荐CLI模式,对于负载测试,必须在此模式下运行Jmeter,以获得最佳的测试结果;

jmeter:
windows下jmx脚本联调好,放到jmeter安装路径bin下面执行:sh jmeter.sh -n -t test.jmx -l test.jtl
-h 帮助
-n 非GUI模式下运行
-t 要运行的Jmeter 测试文件
-l 日志文件,记录结果文件,每次运行之前(要确保之前没有运行过,即xxx.jtl不存在,不然报错)。-l 参数会将jmx 中的监听器禁用掉
-r Jmeter.properties 文件中指定所有的远程服务器
-e 在脚本运行结束后生成html 文件
-o 用于存放heml 报告的目录(目录要为空,不然报错)
Jmeter 生成html 报告:
jmeter.sh -n -t test.jmx -l test.jtl -e -o ./jmeter_html_report/
下载下来打开 index.html 文件
分布式压测:-r 表示分布式远程压测
jmeter.sh -n -t test.jmx -r -l test.jtl -e -o ./jmeter_html_report/
Jmeter 压测接口测性能优化:
简介:Jmeter 压测减少资源使用的一些建议,即压测结果更准确;
1.使用非GUI 模式:jmeter -n -t test.jmx -l result.jtl
2.少使用Listener,如果使用-l 参数,它们都可以被删除或禁用;
3.在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本
4.包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。
5.不要使用功能模式,使用CSV 输出而不是XML;
6.只存在你需要的数据,尽可能少地使用断言
7.如果测试需要大量数据,可以提前准备好测试数据放在数据文件中,以CSV Read 方式读取
8.用内网压测,减少其他宽带影响压测结果;
9.如果压测大流量,尽可能多几个节点以非GUI模式向服务器施压;
QPS和TPS的区别和理解?
QPS: 是Queries Per Second的缩写,意思是每秒查询率,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。
TPS:是Transactions Per Second的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。
压测关注的重要指标?
RT响应时间
CPU 占有率
内存使用率
接口http成功率
Jmeter 如何运作?
JMeter 模拟向一组目标服务器(或目标测试应用)发送请求,接受服务器响应,通过表,图形等返回统计信息,显示目标服务器/应用程序的性能/功能
JMeter 运行原理?
Jmeter 是通过线程组来驱动多个线程运行测试脚本对被测服务器发起的负载,每一个负载机上可以运行多个线程组。Jmeter 基本原理是建立一个线程池,多线程运行取样器生产大量负载,在运行结果中通过断言来验证结果的正确性,通过监听来记录测试结果;
如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;
如果取样器中有关联需求,可以通过后置处理器来完成;
如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成;
如果要模拟并发场景,可以通过定时器来完成;
如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成;
Jmeter 元件执行的顺序?
1.配置元件;
2.前置处理器;
3.定时器;
4.取样器;
5.后置处理器;
6.断言;
7.监听器
服务器性能监控?
在负载性能测试期间,及时了解目标服务器的运行状况方便对性能问题进行定位。Jmeter PerMon 插件可以解决该问题,该插件支持服务器监控,可以监控所有平台上的CPU,内存,磁盘I/O 和网络I/O的使用情况;
ServerAgent 简介:
ServerAgent 可以对被测服务器进行性能监控。注意在实际性能测试时不推荐使用服务器性能监控,因为网络,机器负载从服务器反馈信息到负载机会消耗资源,会影响测试结果。ServerAgent 可远程传回服务器信息给Jmeter 控制机;
服务器监控事例?
Jmeter 安装 PerfMon 插件
目标服务器安装ServerAgent,启动ServerAgent
Jmeter 执行网页性能测试计划,监控服务器的性能;
监听器用:jp@gc - PerfMon Metrics Colllector
jp@gc - PerfMon Metrics Colllector 需要配置监听的 Host/IP Port CPU/IO(可选择)
Jmeter 有哪些Bean Shell?
定时器 BeanShell Timer
前置处理器 BeanShell PreProcessor
采样器 BeanShell Sampler
后置处理器 BeanShell PostProcessor
断言 BeanShell 断言
监听器 BeanShell Listener
BeanShell 常用语法?
vars 这个变量实际上引用了JMeter 线程中的局部变量容器(本质上是Map),它是测试用例与BeanShel 交互的桥梁;
vars.get(String parmStr ); 获取变量
vars.put(String key,String value) 将数据存到Jmeter 变量中;
log:写入信息到jmeter.log 文件,使用方法 log.info(“This is a log info”);
ctx:该变量引用了当前线程的上下文,
props :操作jmeter 属性,该变量引用了JMeter的配置信息,可以获取Jmeter 的属性,它的使用方法与Var 类似,但只能put 进去String 类型的值,而不能是一个对象。
props.get(“AAA”); AAA为属性名,在文件jmeter.properties 中定义
props.put(“BBB”,“1234”);
prev:获取前面sample 返回的信息
getResponseDataAsString() 获取响应信息;
getResponseCode() 获取响应Code;
简述cpu的工作原理?
通过cpu线程去调度运行进程/线程,一个cpu线程同一时间只能调度一个运行线程
运行线程数超出了cpu线程,会启动时间片分配机制
什么是上下文切换?哪些场景会存在上下文切换?
进程间的切换,交接内存/io
线程切换
线程在进程内共享资源。线程的cpu时间片用完了就会放弃cpu,进入队列等待
内核切换,系统调用。
用户空间向内核空间发起调度请求,切换到内核空间给予api,再次切换到用户空间调度api。一次系统调用产生两次切换;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值