PTS-AB-Jmeter-LoadRnner压测工具对比测试 一. 被测系统环境 内网访问: 外网访问: 备注:ECS服务器外网带宽受限制,ECS前端加入SLB则带宽无限制。 URL1: 外网地址:http:// SLBIP:9090/examples/servlets/servlet/HelloWorldExample 内网地址:http://内网:9090/examples/servlets/servlet/HelloWorldExample URL1的Servlet代码: public class HelloWorldExample extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { Thread.currentThread().sleep(100); } catch (InterruptedException e) { } ResourceBundle rb = ResourceBundle.getBundle("LocalStrings",request.getLocale()); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); String title = rb.getString("helloworld.title"); out.println("<title>" + title + "</title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); // note that all links are created to be relative. this // ensures that we can move the web application that this // servlet belongs to to a different place in the url // tree and not have any harmful side effects. // XXX // making these absolute till we work out the // addition of a PathInfo issue out.println("<a href=\"../helloworld.html\">"); out.println("<img src=\"../images/code.gif\" height=24 " + "width=24 align=right border=0 alt=\"view code\"></a>"); out.println("<a href=\"../index.html\">"); out.println("<img src=\"../images/return.gif\" height=24 " + "width=24 align=right border=0 alt=\"return\"></a>"); out.println("<h1>" + title + "</h1>"); out.println("</body>"); out.println("</html>"); } } URL2: 外网地址:http:// SLBIP:9090/ 内网地址:http://内网:9090/ URL2响应页面内容: 二. 压测工具安装环境 PTS压测引擎Trunner、Jmeter Agent、AB、LoadRunner-LoadGenerator均安装在阿里云上同一台linux服务器: 1.操作系统:Linux 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 2.JDK: java version "1.7.0_75" OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~trusty1) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode) 备注:Trunner、Jmeter Agent 压测引擎基于java实现 3.硬件配置: 4Core*2594Mhz+4G MEN 三. 各压测工具对比测试过程及结果 (1) 首先使用各个压测工具开发脚本,脚本配置均采用默认。 (2) URL1-http:// SLBIP:9090/examples/servlets/servlet/HelloWorldExample压测结果如下: (3) URL1-http://内网:9090/examples/servlets/servlet/HelloWorldExample压测结果如下: (4) 基于目前外网测试结果可以看出各个压测工具的测试结果差别很小,接下来进行内网测试。 (5) URL2-http:// SLBIP:9090/examples/servlets/servlet/HelloWorldExample5并发用户-外网测试结果如下: (6) URL2-http://内网:9090/5并发用户内网测试结果如下: (7) 对URL2进行测试过程中发现外网各压测工具的测试结果相差都不大,反而进行内网测试的时候相差巨大,后排查原因发现是 因为Jmeter、AB、LoadRunner的脚本没启用HTTP connection KeepAlive属性,而PTS的脚本默认开启,所以URL2内网测试结果相差巨大。 而外网测试结果之所以结果相差不大,主要是ECS使用了前端SLB接入HTTP请求导致PTS 默认开启的HTTP长连接失效,所以URL2外网测试 结果相差不大。 截图备注:后使用LoadRunner脚本开启HTTP长连接进行URL2内网测试监控可以看出每秒新建连接数和每秒处理事物数成1:1正比,说明使用了SLB长连接失效。 (8) 通过设置Jmeter脚本HTTP协议implementation属性从默认更改为HTTPClient4.0,LoadRunner去掉模拟新用户选项后对 Jmeter/loadrunner/PTS进行对比测试:内网 URL1- http://内网:9090/examples/servlets/servlet/HelloWorldExample,修改servlet 代码去掉Thread.currentThread().sleep(100),测试结果如下: 通过测试结果可以看出在相同的并发用户数下各压测工具HTTP协议压测性能相差较小。 四.测试结论1. 从TPS(每秒处理事务数)角度看,各压测工具测试结果基本相差不大,模拟HTTP协议压测性能基本一致。 2. 从响应时间角度看,各压测工具测试结果基本相差不大,模拟HTTP协议压测性能基本一致。 3. 前端使用负载均衡SLB情况下,HTTP协议Connection KeepAlive失效,导致HTTP请求响应连接使用短连接。 4. 基于现测试环境,在响应时间较小的情况下(通常20ms以下),HTTP使用长连接和使用短连接对测试结果TPS/响应时间影响较大。
|
|