使用jmeter负载测试和tomcat中的延迟

时间:2017-05-11 18:23:26

标签: java amazon-web-services tomcat jmeter load-testing

我在AWS环境中有一个简单的负载测试场景。该应用程序是一个3层的apache(ec2),tomcat(ec2)和mysql(在aws中为rds)作为数据库,在apache和tomcat之前有负载均衡器。我们正在尝试使用具有500个线程的jmeter进行测试,加速时间为10秒。 http请求是对我们的应用程序的简单调用,它接受输入并返回与输出相同的内容。 apache配置为简单的代理传递,tomcat配置如下:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"       acceptCount="100" minSpareThreads="250"  maxThreads="400" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1,TLSv1.2,TLSv1.1"/>

这是jmeter响应:

摘要+ 1 00:00:05 = 0.2 / s平均:1565最小值:1565最大值:1565误差:0(0.00%)有效:98开始:211完成:113

摘要+ 499 00:00:10 = 52.3 / s平均:1319最小值:51最大值:3916误差:0(0.00%)有效:0开始:500结束:500

摘要= 00:00:14 = 35.5 / s平均值:1319最小值:51最大值:3916误差:0(0.00%)

从REST客户端调用URL时,所用时间为100-200ms。当我们在10秒内调用500个请求时,性能会如上所述显着下降。我在负载均衡器上添加了一个tomcat服务器而没有任何改进。

我在执行负载测试时进行了线程转储,并且我看到许多线程处于RUNNABLE状态,如下所示:

"ajp-bio-8009-exec-120" daemon prio=10 tid=0x00007f23680fe000 nid=0x4d1b runnable [0x00007f2341594000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:152)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:309)
        at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:364)
        at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:128)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)

tomcat正在运行2-4GB的堆,而jmeter运行的是1GB堆。 apache和tomcat是双核,7.5GB AWS实例(m3.large)。

Apache在preform MPM中配置如下:

<IfModule prefork.c>
StartServers       150
MinSpareServers    100
MaxSpareServers   150
ServerLimit      350
MaxClients       350
MaxRequestsPerChild  10000
</IfModule>

我在Load Balancers中看不到AWS的云观察中的任何延迟。 我走到了尽头。有什么指针吗?

0 个答案:

没有答案