我正在对运行在 Tomcat (6.0.33) 上的应用程序进行负载测试。随着用户数量的增加,我开始遇到连接问题。以下是 jMeter 返回的结果。我对 Tomcat 还很陌生,有人能给我一些建议吗,从哪里开始查找?
org.apache.http.conn.HttpHostConnectException: Connection to https://example.domain.edu refused
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:284)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1075)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1064)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:426)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:255)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:549)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
... 12 more
答案1
您已确定,超过阈值的用户数后,您的服务将无法响应新连接。您需要使用应用程序服务器上的统计信息和日志记录来确定导致该问题的原因。新连接挂起可能是由于任意数量的资源争用造成的:
CPU、内存或 IO(vmstat 可以帮助解决这些问题)
您可能达到了打开套接字、文件或进程的最大数量的 ulimit(这将记录到系统日志中)
您的应用程序可能会卡住以等待访问外部资源(如数据库),而数据库本身可能会受到上述任何资源争用问题的影响。
简而言之:负载测试,至少对于优化负载下的服务性能而言,只有将其与对所测试服务的仔细监控相结合才能发挥作用,以便量化其结果。通过这种监控,负载测试只能告诉您服务超过哪个阈值就不再可用。
答案2
您应该增加 tomcat 配置中的最大线程数。
以下是解释: http://tomcat-configure.blogspot.com.es/2009/01/tomcat-maxthreads-configuration.html