对 Apache Tomcat 进行压力测试

对 Apache Tomcat 进行压力测试

我如何对 Apache Tomcat 应用程序进行压力测试?
我尝试使用 jmeter,但在一定次数后会收到 jmeter 错误:

java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:479)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1054)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1043)
        at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:416)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:271)
        at java.lang.Thread.run(Unknown Source)

答案1

该消息表明 JMeter 尝试连接到您的应用程序但无法连接。这通常意味着 Tomcat 已停止响应请求,因为您已达到某些限制。Tomcat 启动处理请求的线程数有限制,并且 Java VM 施加的限制可能会阻止处理请求(最有可能是前者)。

JMeter 是我发现的执行应用程序实际压力测试的最佳工具之一,但你也可能会发现Java 旋律一款与 JMeter 配合使用的宝贵工具。它可以更深入地了解您的应用正在做什么(即它使用了多少内存、不同页面的响应时间、垃圾收集启动的频率等)。并且它有很多漂亮的图表。

你还应该查看在调整 tomcat 时为您提供指点(结合官方文档以确保某些内容在您的情况下仍然有效或适用)。

如果这是一个使用率很高的系统,我也会考虑安装Apache 原生库(启动 Tomcat 时,它会在日志中提示您)。在启动前后测试您的应用程序,看看它们是否有帮助(它们使用 C 而不是 Java 编写 Tomcat 的某些部分,以提高性能。最值得注意的是实际的连接处理部分和某些加密函数)。

答案2

这个数字有多高?
你能告诉我们更多关于上面的应用程序的信息吗?
你计划的部署有多严肃?

如果您使用的是 Windows XP,则存在所谓的半开连接限制,这在过去曾导致过问题。这与您的情况类似,在达到一定数量的并行连接之前,一切都运行正常。
就是这样我解决了那个问题。

答案3

我会将其解读为已经是一次测试,但却失败了!

替代工具是 apache bench,或者只是wget蜘蛛模式。

或者更复杂的工具,如 HP Load Runner 或 quick test pro。

tomcat 手册对最大同时请求数有如下说明,因此您可能需要调整系统以达到您的要求;

在服务器启动时,此连接器将创建多个请求处理线程(基于为 minSpareThreads 属性配置的值)。每个传入请求都需要一个线程来处理该请求。如果同时收到的请求多于当前可用的请求处理线程可以处理的数量,则会创建额外的线程,直至达到配置的最大值(maxThreads 属性的值)。如果同时收到更多的请求,它们将堆叠在连接器创建的服务器套接字中,直至达到配置的最大值(acceptCount 属性的值)。任何进一步同时收到的请求都将收到“连接被拒绝”错误,直到有资源可用于处理它们。
http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

相关内容