性能测试

概念

基本名词

1、并发,对被测代码的同时请求
2、TPS,Transactions Per Second,每秒处理的事务数目。一个事务是指向服务器发送的一个请求然后服务器做出反应的过程。在jmeter中,大多数情况下,Throughput吞吐率被认为等于TPS,公式:Throughput=samples(总事务数)/duration(持续时间)=TPS
3、QPS:全名 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数。与TPS不同的是,一个事务在分布式处理中,可能会对应有多个请求。对单个接口压测,且这个接口内部不再去请求其它接口,那么tps=qps,否则,tps≠qps。
4、响应时间:从客户端在发送请求开始,收到服务器响应后结束,以此计算一个事务的响应时间。统计全部事务的响应时间,取平均
5、负载:一般理解为服务器的CPU、内存,IO等资源的使用率。负载是一个平均进程数,统计处于 runnable state(可运行状态) 和 uninterrupttable state(不可中断状态)的进程数;可运行状态是指正在使用cpu,或者正在等待使用cpu;不可中断状态是进程正在等待一些IO的请求,诸如磁盘IO/网络IO。

策略

压力测试(StressTesting)

概念:通过模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。压力测试需要确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大的服务级别。通俗地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受

负载测试(Load Testing)

概念,负载测试有时也会被称为“容量测试”或者“耐久性测试/持久性测试”,给被测系统加上它所能操作的最大任务数,其目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。对于WEB应用来讲,负载则是并发用户或者HTTP连接的数量。负载测试通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。

性能测试(PerformanceTesting)

概念,性能测试的目的是排除系统的性能瓶颈,是一个非常小心受控的测量分析过程:“运行负载试验->测度性能->调试系统”,并为回归测试建立一个基准。在理想的情况下,被测应用在这个时候已经是足够稳定,所以这个过程得以顺利进行。性能测试还有另一个目标就是建立一组被测系统的基准数据。应用在网络上的性能测试重点是利用成熟先进的自动化技术进行网络应用性能监控、网络应用性能分析和网络预测。

工具

Jmeter

JMeter作为一款广为流传的开源压测产品,最初被设计用于Web应用测试,如今JMeter可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP服务器等等,还能对服务器、网络或对象模拟巨大的负载,通过不同压力类别测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能测试和回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

JMeter的特点包括对HTTP、FTP服务器、数据库进行压力测试和性能测试;完全的可移植性;完全 Swing和轻量组件支持包;完全多线程;缓存和离线分析/回放测试结果;可链接的取样器;具有提供动态输入到测试的功能;支持脚本编程的取样器等。在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录浏览器的HTTP请求,也可以记录Apache等WebServer的log文件来重现HTTP流量,并在测试运行时以此为依据设置重复次数和并发度(线程数)来进行压测。

压测实战分享之JMeter工具使用初探
官网链接

LoadRunner

LoadRunner是一种预测系统行为和性能的负载测试工具,通过模拟实际用户的操作行为进行实时性能监测,来帮助测试人员更快的查找和发现问题。LoadRunner适用于各种体系架构,能支持广泛的协议和技术,为测试提供特殊的解决方案。企业通过LoadRunner能最大限度地缩短测试时间,优化性能并加速应用系统的发布周期。

LoadRunner提供了3大主要功能模块:VirtualUser Generator(用于录制性能测试脚本),LoadRunner Controller(用于创建、运行和监控场景),LoadRunner Analysis(用于分析性能测试结果)既可以作为独立的工具完成各自的功能,又可以作为LoadRunner的一部分彼此衔接,与其他模块共同完成软件性能的整体测试
LoadRunner官网
性能测试入门——LoadRunner使用初探

调优

经验

负载升高的原因

1、大量数据请求时,包括搜索时全表扫描、以及大量的导出数据等。这种情况下一般大量的读请求让IO成为瓶颈,导致其他进程也处理缓慢,因此随着时间的增加负载就会升高
2、事务未提交,一般一些业务处理系统,耦合关系强,如订单的出库和库存的关系,一般是需要原子性操作,这个时候一般会使用事务来进行控制,但是不幸出现事务未提交的情况,会导致大量资源被锁,其他请求处于长时间等待的情况,这种情况也会导致负载升高
3、死锁,mysql的死锁检测以及回滚都会有一定的时间,加之事务对资源的独占,出现死锁会出现短暂的拥堵现象,同时负载的短时间内上升,不过后面继续会下降。但是死锁很频繁的情况下,负载也会一直较高
4、内存不足时,mysql服务器是相当耗费内存的,如果内存不足导致交换分区长时间使用的话,也会让机器负载升高
5、其他导致的一些IO问题,如磁盘损坏以及磁盘空间不足

踩坑

Jmeter进程突然停止

参考:stackoverflow
启动命令加上nohup解决:
nohup jmeter -n -t .jmx -l .jtl -e -o &

你可能感兴趣的:(性能测试)