文章目录
进入金三银四,很多小伙伴有被动跳槽的打算,所以更新一些性能测试面试题,希望能帮到大家。
一 说下你的性能测试流程
找产品沟通哪些接口需要压测,需要达到什么样的预期值(TPS和响应时间);
编写测试计划,人员、时间周期、工具;
环境搭建;
造数据;
场景测试(单接口基准测试、单接口压力测试、混合接口测试、稳定性测试);
结果分析,提交测试报告;
等待开发性能调优,复测。
二 性能测试的应用领域有哪些?
1、能力验证:乙方向甲方交付项目时,声明项目的性能数据。
2、瓶颈分析:在能力验证的过程中可能会发现一些瓶颈,通过技术手段分析瓶颈,得到分析数据,为后续调优做理论依据。
3、响应超时:什么负载量的时候出现超时现象?
4、tps达到瓶颈,波动剧烈:tps瓶颈点在哪里?,在什么地方出现性能衰减?
5、性能调优:在得到瓶颈分析数据之后,做性能调优。
6、降低超时,提高tps,减少抖动。。
7、容量规划:基于未来。为将来的用户激增提前做准备
8、数据库扩容
9、服务端硬件优化(增加cpu,扩充磁盘,提升带宽,分布式,负载均衡)
三 说下服务器资源监控的命令
top: 能够实时监控系统的运行状态,并且可以按照cpu及内存等进行排序;
vmstat: 可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、cpu;
free: 能够监控系统的内存使用状态。其中,total:总计物理内存的大小;
netstat: 显示本机网络链接、运行端口、路由表等信息;
atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注;
iftop 命令监听指定接口(如 eth0)上的网络通信情况。它显示了一对主机的带宽使用情况。
四 tps压不上去,可能有哪些方面原因?
1、网络带宽
在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服务端的处理能力上限。
2、连接池
可用的连接数太少,造成请求等待。连接池一般分为服务器连接池(比如Tomcat)和数据库连接池(或者理解为最大允许连接数也行)。
3、垃圾回收机制
从常见的应用服务器来说,比如Tomcat,因为java的的堆栈内存是动态分配,具体的回收机制是基于算法,如果新生代的Eden和Survivor区频繁的进行Minor GC,老年代的full GC也回收较频繁,那么对TPS也是有一定影响的,因为垃圾回收其本身就会占用一定的资源。
4、数据库配置
高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引,抑或没有主从分离、读写分离等,就会导致数据库事务处理过慢,影响到TPS。
5、通信连接机制
串行、并行、长连接、管道连接等,不同的连接情况,也间接的会对TPS造成影响。
6、硬件资源
包括CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。
7、压力机
比如jmeter,单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会间接影响TPS(这个时候就需要进行分布式压测来解决其单机负载的问题)。
8、压测脚本
以jmeter举个例子,之前遇到的,进行阶梯式加压测试,最大的模拟请求数超过了设置的线程数,导致线程不足。
还有录制的脚本,需要删除一些不必要的脚本,对脚本进行优化,免得这些不必要的请求占用资源。
9、业务逻辑
业务解耦度较低,较为复杂,整个事务处理线被拉长导致的问题。
10、系统架构
比如是否有缓存服务,缓存服务器配置,缓存命中率、缓存穿透以及缓存过期等,都会影响到测试结果。
11、并发数
系统的TPS是确定的,当并发数设置不恰当时,tps也较低。
五 怎么设计性能场景?
基准测试场景:模拟少量的虚拟用户对一个或多个业务某项性能指标进行定量和可对比的测试。将测试结果作为基准数据,在系统调优或者评测的过程中,通过运行相同的业务场景比较测试结果。
单接口测试:通过模拟虚拟用户,通过不断增加模拟用户数持续运行测试,获取事务响应时间,tps,报错率监测测试系统的各服务器资源使用情况。每一个虚拟用户级别会对应tps,直到找到tps的拐点,说到拐点可能大家能够想到像山峰一样的高斯曲线,但其实这是一个极其理想的情况,大部分情况下是增长到一定的阈值就不再增加。
混合接口场景:将多个接口按照实际比例进行性能测试,这个比例就是综合场景的关键了,综合场景执行除了要观察总的tps,还有一个非常关键的因素就是接口之间的调用比例,比例不能偏离。(需要结合实际业务)
稳定性测试:通过给系统加载一定压力的情况下,运行较长一段时间,验证系统是否稳定。(比如:运行48小时)
高可用测试:有两台数据库服务,其中一台宕机了,能不能及时切换到另外一台上,且切换的时延是多少,处理能力能不能达到预期标准。
六 如何识别性能瓶颈?
① 硬件上的性能瓶颈:如CPU、内存、磁盘读写等的瓶颈,为服务器硬件瓶颈;
② 应用软件上的性能瓶颈:如服务器操作系统瓶颈(参数配置)、数据库瓶颈(参数配置)、web服务器瓶颈(参数配置)、中间件瓶颈(参数配置)等;
③ 应用程序上的性能瓶颈:应用程序上的性能瓶颈,如SQL语句、数据库设计、业务逻辑、算法等等;
④ 操作系统上的性能瓶颈:一般指的是Windows、linux等操作系统,如出现物理内存不足时,或虚拟内存设置不合理(虚拟内存设置不合理,会导致虚拟内存的交换率大大降低,从而导致行为的响应时间大大增加,可以认为在操作系统上出现了性能瓶颈);
⑤ 网络设备上的性能瓶颈:一般是防火墙、动态负载均衡器、交换机等设备导致。
七 内存溢出和泄漏区别?
内存泄漏: 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
内存溢出: 指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。
以上就是今天的全部内容,希望对大家有所帮助,也希望大家多多留言、点赞、在看、转发四连爱❤️ 支持。 咱们下篇文章见,Bye~👋
最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!