性能面试题目

1、性能测试的流程是什么?
需求调研-环境搭建-脚本编写-准备数据-执行测试-回归调优-测试报告

2、什么是关联?在什么情况下需要做关联?
关联是将服务器返回的数据通过一定的规则过滤出来,将其保存成参数,以供后续代码中使用
当服务器返回的数据是动态变化的,且后续脚本中需要使用这个变化的数据时,才需要做关联

3、loadrunner中unique参数化是怎么实现的?
unique参数化主要原理:根据并发用户个数,将某个连续的范围分段,每个用户使用其中的一段数据,
unique规定了第一段的起始值和每一段的size,从而使每个用户在各自的数据段的取值,而不会产生重复的值

4、loadrunner中参数和C语言变量的区别是什么?分别用哪两个函数进行转换?
主要区别:参数往往是LR自动保存的,如关联、检查点函数等,它可以在LR的web类函数的参数中直接使用;
变量是用户自己定义的,不可以直接放在web函数中使用
lr_save_string:变量转参数
lr_eval_string:参数转变量

5、Jmeter中怎么写Java脚本,简要说下步骤
a)通过eclipse等工具手动编写一个Java类,实现JavaSamplerClient接口
b)将要写的代码放到JavaSamplerClient接口对应的实现方法中,如果需要暴露出参数,将参数添加到getDefaultParameters方法中
c)脚本调试通过后,将写好的脚本达成runnable jar,将jar包和依赖的lib文件夹放到Jmeter的lib/ext下,重启Jmeter
d)在Jmeter中添加JavaSampler,选择jar包中的测试类

6、一般在什么情况下会在Jmeter中使用BeanShell
a)被测接口调用前需要对参数做一些逻辑处理,可以使用BeanShell前置处理器
b)需要对接口的返回值做一些逻辑判断,可以使用BeanShell断言

7、怎么根据线下环境评估线上环境的性能
a)首先线下必须要有专门的性能测试环境
b)线下环境单台机器配置和线上不能相差很大,可以通过单台的机器性能推算出多台机器性能(需考虑一定的性能损耗)
c)如果线下机器配置很差,只能测试出程序有无性能问题,这样线下测试出来的数据对线上没有太大参考意义
d)如果想获取比较准确的线上性能情况,建议最好做线上的性能测试

8、对于Linux系统,主要的监控指标有哪些?他们的各自阈值是多少?
cpu使用率:<80%
load值: 系统内存:使用率<80%
磁盘IO:<100%-90%
网络IO:<带宽上限

9、线程都有几种状态?哪些状态需要关注?
线程状态:runnable、waitting、timed-waitting、blocked、terminated
最影响性能的是blocked状态(阻塞,锁)的线程,timed-waitting(限时等待)

10、Jvm中持久代(方法区)中主要存放什么数据?老年代主要存放什么数据?
持久代中主要存放静态数据、常量、类的基本信息等
老年代中主要存放对象的实例和数组等

11、应用服务器cpu高和数据库服务器cpu高的分析思路是什么?
应用服务器的cpu高,先要看tps和响应时间,如果tps比较高,我们认为是正常的cpu消耗;如果tps比较低,那么往往某些代码过于消耗cpu,可以考虑使用jprofiler分析下
数据库服务器cpu高,往往是因为sql语句执行效率比较低,可以通过对数据库慢查询是监控,结合执行计划进行分析,是否是相关表没有索引或索引未生效

12、出现内存泄露的根本原因是什么?你是怎么定位内存泄露原因的?
内存泄露的根本原因是Jvm中老年代中存在着大量存活的对象,这些对象不能被GC回收掉,从而占满了整个老年代,造成Jvm一直处于FGC的状态,程序没有响应,服务器报OOM错误
内存泄露主要通过分析老年代中占用空间最大的类都有哪些,然后去代码中找对应的类的创建。通常可以使用jdk提供的jvisualvm和jmap进行堆内存的分析

13、tps压不上去,可能有哪些方面的原因?
a)压力机本身性能瓶颈
b)网络IO瓶颈
c)中间件(tomcat/nginx/mysql)连接数限制
b)Java线程的阻塞、等待
e)本系统资源的瓶颈(cpu、内存、磁盘、网络等)
f)其他外部系统响应时间过长,造成本系统的time-wait

14、性能场景怎么设计?一般都有哪些性能场景?
一般基本的场景包括:基准测试、单交易测试、混合测试、稳定性测试
其他场景的可选场景:高可用性测试、异常测试等,以及其他的结合各自项目业务的场景

15、测试数据怎么构造?你一般都是采用哪些方法来造数据?
a)调用业务接口构造数据
b)直接写jdbc代码造数据
c)存储过程造数据

你可能感兴趣的:(性能面试题目)