分布式压测步骤,流程简介
1.需求调研:系统线上的性能需求、运行环境、系统架构、测试背景和任务信息等
2.需求分析:根据上面的需求调研,得出系统性能指标等。例如:tps值、响应时间等
需要完成性能测试实施方案编写、测试环境的准备、性能测试用例设计、性能测试监控方案设计、性能测试脚本及相关测试数据的准备,并在上述相关准备活动结束后按照测试计划进行准入检查。
测试准入:需求调研完毕、测试版本准备完毕。
方案设计:确定多个业务场景、性能测试工作的时间计划安排、预期的风险与风险规避方法。
用例设计:用例的描述、测试环境描述(硬件、软件、应用版本、测试数据)、延迟设置、压力场景
、执行描述、预期结果、监控要点。
数据准备:线上录制的数据、自造模拟数据、实时行情数据。
测试脚本:通过录制,或者编写,完成脚本代码生成。
概述:测试执行期间,借助测试工具执行测试场景或测试脚本,同时配合各类监控工具。执行结束后统一收集各种结果数据进行分析。根据需要,执行阶段可进行系统的调优和回归测试。
测试执行:测试过程中,通过对每个测试结果的分析来决定是重复执行当前案例还是执行新的测试案例;通常发现瓶颈问题会立即进行调整并重新执行测试用例,直到当前的案例通过。
结果记录:执行阶段,测试的执行、分析调优、回归测试工作较为反复,须认真记录全部执行过程和执行结果,执行结果数据是分析瓶颈的主要依据。
测试监控:测试的监控工作与执行工作同步进行,场景或脚本开始执行时,同时启动监控程序(可以用nmon或者系统命令top/vmstat/iostat 等)
测试结果分析:测试过程中根据性能测试工具显示结果、监控结果综合分析出现的测试问题
报告撰写:性能测试报告要内容包括:测试目的、范围及方法、环境描述、测试结果描述、结果分析、结论和建议等。
测试结果描述:测试结果的描述,应体现性能测试的执行过程,可以按照用例场景,描述各个并发梯度下测试结果及监控结果;建议制作表格记录数据,同时将结果截图附上。
测试缺陷与问题:在性能测试分析报告中须描述测试过程发现的缺陷与问题,对于确认是测试缺陷的项进行风险评估,并给出风险提示。
最终结果分析:该部分内容应该全面、透彻、易理解且通过图表方式表达更直观。建议将整个系统的性能指标绘制成表格。
测试结论:测试的结论须清晰、准确回答性能测试需求中描述的各项指标,需全面覆盖测试需求。
性能测试的总结工作,主要对该任务的测试过程和测试技术进行总结。性能测试工作进入总结阶段,也意味着性能测试工作临近结束。在这个阶段,时间允许的情况下应将所有的重要测试资产进行归档保存,将报告上传至svn。
①.先到jmeter的工作bin目录下,运行jmeter.bat,进入可视化界面
②.新建线程组
③.新建http请求(接口入参)
④.新建响应断言(判断每次请求返回的结果均符合预期)
⑤.新建查看结果树
⑥.新建聚合报告
Jmeter 是java 应用,对CPU和内存消耗较大,使用jmeter做大并发压力测试时,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经死机了。 为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制——JMeter分布式压测,即用一台控制机,控制多台远程负载机,同时对服务器施压。
1、选择其中一台机器作为控制机(Controller),其它机器则做为代理机(Agent);
2、执行时,Controller将脚本发送到每台Agent上。Agent拿到脚本后开始执行,Agent执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,然后通过命令行模式来执行;
3、执行后,Agent会把结果回传给Controller,Controller收集所有Agent的信息
(1)测试准备:在所有期望运行jmeter的机器上安装JDK、Jmeter。(注意版本一致性,避免执行脚本出问题), 确定一台机器作为 controller ,其他的的机器作为agent 。
(2)配置Agent暗号:打开Agent的Jmeter/bin/jmeter.properties,将”remote_hosts=127.0.0.1”修改为”remote_hosts=本机IP:1099。其中1099是端口号,可以随意自定义,推荐使用默认。
(3)运行所有 agent 机器上的jmeter-server 文件,此时Agent进入可被调用状态
(4)打开controller的Jmeter/bin/jmeter.properties,将remote_hosts=127.0.0.1修改为:remote_hosts=Agent1IP:port,Agent2IP:port,Agent3IP:port……
(5)启动controller 上的jmeter应用,选择菜单“运行”—>“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来启动所有agent执行脚本,测试结果在controller上查看。
注意:当agent无法返回测试结果或无法执行脚本时,先确认是否开启了防火墙或者机器之间网络是否通,之前遇到过网络单向通的情况。
1)压测机可扩展:按需拓展多个低端计算机复制压测,模拟一个较大的服务器压力;
2)测试计划执行统一:无需手动将测试脚本复制到每台机器,Controller会将它发往每一台Agent,每台Agent执行相同的测试计划;
3)数据收集方便:保存测试采样数据到Controller机器,方便分析。
jprofile是一个全功能的 Java 剖析工具( profiler ),专用于分析 J2SE 和 J2EE 应用程序。它把 CPU 、执行绪和内存的剖析组合在一个强大的 应用中。 JProfiler 可提供许多 IDE 整合和应用服务器整合用途。 JProfiler 直觉式的 GUI 让你可以找到效能瓶颈、抓出内存漏失 (memory leaks) 、并解决执行绪的问题。
服务端配置
1:tomcat容器监控配置
打开tomcat Bin目录下catalina.sh添加
CATALINA_OPTS="-agentpath:/home/mylike/jprofiler9/bin/linux-x64/libjprofilerti.so=port=8849,nowait $CATALINA_OPTS“
2:内置tomcat,在启动脚本中添加
eg::nohup java -Xms4g -Xmx4g -Xmn1g -server -agentpath:/home/upay/jprofiler9/bin/linux-x64/libjprofilerti.so=port=9002,nowait -jar ORDER.jar jfile=ORDER.properties &
echo $! > /root/conpay/ORDER/ORDER.pid
内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露(区别于内存溢出)
内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用
一般内存溢出是在跑稳定性压测时出现,通常在tomcat Bin目录下catalina.sh添加
CATALINA_OPTS="-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/lcfx50/logs/dump”,如果程序内存溢出则会自动dump堆内存情况到指定HeapDumpPath路径。生成的文件可以用jprofiler打开分析。
jmap -dump:format=b,file=heapdump pid:将内存使用的详细情况输出到文件
操作实例:
java -Xms20m –Xmx30m -jar cycle.jar
该jar包实现死循环, -Xmsjvm启动时分配的内存20m,-Xmx分配的最大内存30m,当程序执行持续占有内存直到JVM分配的最大内存30m,则程序会OOM 内存溢出
内存溢出原因: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小
JDK自带工具命令:主要用于生成指定进程当前时刻的线程快照,线程快照是当前java虚拟机每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是用于定位线程出现长时间停顿的原因,如线程间死锁(Deadlock)、阻塞(Blocked)死循环、请求外部资源导致长时间等待。
jstack -l jstack.txt