jmeter测试总结
一次性能测试的总结
Apusic应用服务器作为企业应用的运行平台,系统的性能非常重要。当应用对性能的要求比较苛刻时,就要考虑是否需要改变系统的缺省设置来提升服务器的性能。首先应该考虑系统的硬件环境(CPU主频高低、内存大小、硬盘转速及网络传输速率等)是否能满足应用的需
有机会做了一次性能测试工作,主要是预研性质的工作。开发人员有必要再提交给测试做性能测试之前,做一次比较粗糙的性能测试工作。 1)走通性能测试流程,从造数据到测试,可以走通,方可交由测试同学。毕竟开发(相对性能测试人员而非功能测试)对业务逻辑更了解一些。 2)测试一些显而易见的bug; 3)建立性能方面的信心;4)可在测试的同学做完测试以后做一个对比,不至于偏离太过离谱。参照测试部门的意见,我把这次的性能测试总结了如下几个步骤:1、测试目标和范围:根据需要满足的非功能需求,确定上线功能点哪些需要测试。测试性能、稳定性、最大压力。2、测试方案准备:包括施压方式,环境配置,环境依赖,资源监控,整理方案文档。3、环境准备:准备压力测试环境,一般是压力测试机配置,压力测试数据库配置。4、数据准备:根据线上预估数据,对数据库数据进行准备和模拟。5、测试准备:包括需要编写的程序,如其他系统间依赖可写mock程序。另外编写jmeter的测试计划等。尝试测试,并确保一个请求或处理过程能顺利通过。6、进行测试:通过客户端施压服务器,监控器各方面资源利用。7、进行测试分析总结,写测试报告。TPS,吞吐量,CPU占比等。对异常现象记录,如内存溢出等。8、根据测试报告对程序进行优化或重构。做技术还是有做技术的天性,我们开发最关心的也就是5-8的步骤。我们的应用主要以hessian接口的形式向外面暴露,另外的就是任务在后台处理接口推送过来的数据。所以,我们的测试主要集中在接口测试和任务测试。比一般网页的性能测试更简单一些。我们选用的施压客户端是开源的jmeter,文档较为丰富,且操作极为方便,扩展性好。服务器端性能监控工具,均采用linux的shell命令和jvm自带的工具或命令。jvm的工具已经够强大了,测试团队也是利用linux的命令采集服务器端资源,然后把消息发送到自己编写的一些资源监控工具上,其实都是利用了原生的shell命令和jvm命令来周期性采集并绘图的。JMeter没有现成的sampler施压hessian的接口,所以我们需要利用它极具扩展性的java请求 sampler来施压hessian接口。我们查看jmeter安装目录下的lib>ext下可以发现其他多种类型的sampler。其他的种类都可以由java sampler来实现。我们只需要继承org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient该类,在runTest方法中调用hessian接口,并封装返回值即可。然后把工程打成jar包,放到jmeter安装目录下的lib>ext下。启动jemter,在利用java sampler就可以定为到我们编写的扩展测试程序了。在压力测试过程中,包括两部分的资源检测,jvm的资源占用。一般利用jdk自带工具集1、jps
常用的几个参数:
-l
输出java应用程序的main class的完整包
-q
仅显示pid,不显示其它任何相关信息
-m
输出传递给main方法的参数
-v
输出传递给JVM的参数。在诊断JVM相关问题的时候,这个参数可以查看JVM相关参数的设置2、jstat - Java Virtual Machine Statistics Monitoring Tool
jstat [Options] vmid [interval] [count]
Options -- 选项,我们一般使用 -gcutil 查看gc情况
还有其他选项如:
-class
-compiler -gc -gccapacity -gccause -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -printcompilation
vmid
-- VM的进程号,即当前运行的java进程号
interval-- 间隔时间,单位为毫秒
count
-- 打印次数,如果缺省则打印无数次
-----------------------------------------------jstat -gcutil [pid] 输出解释
S0
-- Heap上的 Survivor space 0 区已使用空间的百分比
S1
-- Heap上的 Survivor space 1 区已使用空间的百分比
E
-- Heap上的 Eden space 区已使用空间的百分比
O
-- Heap上的 Old space 区已使用空间的百分比
P
-- Perm space 区已使用空间的百分比
YGC -- 从应用程序启动到采样时发生 Young GC 的次数
YGCT-- 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC -- 从应用程序启动到采样时发生 Full GC 的次数
FGCT-- 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT -- 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
3、jhat - Java Heap Analysis Tool 用于内存快照文件的分析,当然还有很多类似工具4、jstatd - Virtual Machine jstat Daemon5、jinfo - Configuration Info6、jvisualvm - Java Virtual Machine Monitoring, Troubleshooting, and Profiling Tool7、jconsole - Java Monitoring and Management Console8、jmap - Memory Map jvm内存分析工具,得到最普遍的使用。
jmap -histo <pid> b.log
输出内存类占用,对比各时段的内存类,可方便知道回收情况和占用情况。
jmap -dump:format=b,file=heap.dump <pid>
输出内存快照,可用许多开源工具分析内存快照。
jprofile 太耗内存,如果静态分析能得出结论的可避免使用9、jstack - Stack Trace 打印线程的堆栈跟踪信息10、btrace -sun提供的检测工具,很好很强大,用于检测函数耗时等,微浸入。而服务器端的资源监控多用Linux的shell命令如:top,free,vmstat,iostat,uptime等,详细用法不累述。本次测试过程中遇到的几个误区和犯的错误:1、jmeter关于线程组的线程数和ramp-up值的设置,如果设置ramp-up为1秒,线程数为10,我错误的理解为这就是一秒内的请求量。其实是jmeter一秒内启动了10个线程,这10个线程分别发送请求,知道服务器端返回后,再次发送。这个错误的理解直接导致我们的一个异步接口(接口把数据保存在一个无上限queue中,另外起线程来消费)在压力测试过程中,被压垮,以为是内存泄露问题,其实只是我们的服务器没能力处理这样一个数据量。2、在一个日志处理模块中的生产和消费者模型中,产生的线程过多。后经过配置修改了消费者和生产者的比例。但是在定位问题时,产生很多困难,因为不知道是什么线程出现这么多。程序中所有的线程必须命名才方便工具的观察,需要开发中规范和定义好。3、对于任务类型的性能测试没有返回值,我们怎么观察任务处理一条记录的时间,或单位时间内处理记录的条数呢?开发人员习惯在源代码中去修改,并做trace,更好的方法是采用btrace工具来跟踪方法的进出。它在监控方法的耗时,查看某些方法的参数值,监控内存使用情况等一系列场合中使用。4、开发错误的理解 org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 类的corePoolSize和maxPoolSize和queueCapacity三者的关系。原以为corePoolSize是启动时变初始化的核心线程数,如果还有任务需要执行,那么就会新建线程到线程池中,直到达到最大maxPoolSize的大小。然后放不下的任务才浸入queueCapacity中存储。而实际情况确是:任务到达corePoolSize之后,就放入queueCapacity的queue中了。造成我们的配置错误,引起串行的任务执行。的确在开发功能测试中没有发现的问题,通过性能测试暴露了出来。除了这些bug之外,我们还确认了我们接口的性能,任务的性能和稳定性。
jmeter测试总结的更多相关文章
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- jmeter性能测试总结
一.性能测试问题记录: Ⅰ.秒杀的失败率了在96.45%,原因 Query对于 活动的秒杀采用的是0.5秒,刷新缓存的策略在活动中优惠券被秒杀一空 下架前,短暂的时间内仍能够查询到 这个活动架构中采用 ...
- Jmeter+badboy压力测试总结
流程:badboy导出Jmeter压测脚本 -> Jmeter进行压力测试 软件下载地址: badboy:http://www.badboy.com.au/ Jmeter:http://jmet ...
- Jmeter之压力测试总结
一.基本概念 1.线程组N:代表一定数量的并发用户,所谓并发就是指同一时刻访问发送请求的用户.线程组就是模拟并发用户访问. 2.Ramp-Up Period(in seconds):建立所有线程的周期 ...
- 【Jmeter】api性能测试总结
1.前提概念 平时常用的性能测试:api性能测试+场景性能测试:今天就说一说api性能测试 2.如何进行性能测试? 需求:对某api进行性能测试,看看最大承受的并发数,分析下图表 分析: 错误思路:当 ...
- 接口测试思路,jmeter,接口测试流程
接口测试总结 一:接口测试思想 接口测试:通过向服务器端发送请求,获取响应与预期结果做对比的一种服务端黑盒测试过程. 解释:接口就是将浏览器,客户端,手机端,或者服务器调用另一个服务器的请求抽离出来测 ...
- Jmeter测试实践:文件下载接口
一 Jmeter步骤 1.打开jmeter4.0,新建测试计划,添加线程组.根据实际情况配置线程属性. 2.添加HTTP请求.根据接口文档进行配置. Basic部分修改如下,Advanced部分保持默 ...
- 如何使用jmeter做一个功能的性能测试
一.为什么又再次写类似的文章? 在博客园和公号写文章,已经快两年了,所以自然在公号和博客园都能联系到我的. 也就是几天前,有个人加我微信,对于总有人加我好友,我已经觉得不奇怪了,为什么呢? 加我好友的 ...
- JMeter接口压测和性能监测
JMeter接口压力测试总结 一.安装JMeter 1. 在客户端机器上安装JMeter压测工具,我这里安装的版本是apache-jmeter-5.2.1,由于JMeter是JAVA语言开发的 ...
随机推荐
- rsync数据同步工具应用指南
Rsync (Remote synchonization) rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类 ...
- Python递归函数和二分查找算法
递归函数:在一个函数里在调用这个函数本身. 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属 ...
- HDU 5726 GCD(ST&RMQ)
题目链接 GCD 先ST倍增预处理,f[i][j]表示从i开始(包含第i个数)的连续2^j个数的最大公约数. 这样就可以在O(1)内询问得到a[l]到a[r]之间的所有数的最大公约数的值. 然后对于每 ...
- [转载][FPGA]有限状态机FSM学习笔记(二)
1. Mealy和Moore状态机的互换 对于给定的时序逻辑功能,可以用Mealy机实现,也可以用Moore机实现.根据Moore机比Mealy机输出落后一个周期的特性,可以实现两种状态机之间的转换. ...
- 公司内部技术分享之Vue.js和前端工程化
今天主要的核心话题是Vue.js和前端工程化.我将结合我这两年多的工作学习经历来谈谈这个,主要侧重点是前端工程化,Vue.js侧重点相对前端工程化,比重不是特别大. Vue.js Vue.js和Rea ...
- 2017 [六省联考] T1 期末考试
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 842 Solved: 385[Submit][Status ...
- XCode 4.3 Unable to load persistent store UserDictionary.sqlite 以及 ios simulator failed to install the application
I have been working on an iOS app for some time, all of a sudden I am getting the following crash ev ...
- 字符串(NSString)及常见字符串处理函数
从本系列文章的开始,我们就使用过字符串对象,但是我们却还没有比较详细的介绍过它.使用@符,再一对双引号将一组字符串引用起来,例如: @”In fact, Objective-C is very sim ...
- android中setClickable,setEnabled,setFocusable的含义及区别
setClickable 设置为true时,表明控件可以点击,如果为false,就不能点击:“点击”适用于鼠标.键盘按键.遥控器等: 注意,setOnClickListener方法会默认把控件的se ...
- 【转载】Websocket学习
首先是在Tomcat里面看到Websocket的演示.很有意思. http://localhost:8080/examples/websocket/index.xhtml 里面有: Echo exam ...