java - 使用 JMeter 对 1000 个用户进行负载测试时出现 Apache Tomcat Connection Refused 错误

标签 java apache tomcat amazon-web-services jmeter

我已经在 linux 和 Apache Tomcat 7.0.42 中部署了一个 Java EE 应用程序

当我使用 JMeter(并发 100 个线程请求)对 100 个用户进行负载测试时,一切正常

但是,一旦我将用户(或线程数)更改为 1000,服务器就会被阻塞,并且它会为 ~600 之后的所有请求提供“连接被拒绝”错误。

我已经对应用程序进行了所有微调,它现在更像是一个静态网页,即使它返回时也会出错。

服务器配置:Ubuntu,8 个 vCPU/32 GB RAM/960 GB HD

PS:同样的应用在AWS(Amazon Web Services)中运行良好,所以你可以排除我的机器运行JMeter(client)的任何问题

    org.apache.http.conn.HttpHostConnectException: Connection to http://a.b.c.d:8080 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:645)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
    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:286)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1088)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1077)
    at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    ... 12 more

最佳答案

尝试调整 server.xml 中 http 连接器的 maxThreadsacceptCount 属性:

Each incoming request requires a thread for the duration of that request. If more simultaneous requests are received than can be handled by the currently available request processing threads, additional threads will be created up to the configured maximum (the value of the maxThreads attribute). If still more simultaneous requests are received, they are stacked up inside the server socket created by the Connector, up to the configured maximum (the value of the acceptCount attribute). Any further simultaneous requests will receive "connection refused" errors, until resources are available to process them.

引用:http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

关于java - 使用 JMeter 对 1000 个用户进行负载测试时出现 Apache Tomcat Connection Refused 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636527/

相关文章:

java - 为什么不支持向 java.time.Instant 添加周数?

apache - (Jekyll?)自动 i18n(使用 Apache 的 mod_negotiation)?

apache - 当获取没有index.php的目录时,htaccess不会重写URL

java - 从 Jenkins 更新 Docker 镜像和容器

java - Tomcat 记录冲突

java - 不支持 maxOccurs 大于 5000 的 XMLSchema 的解决方法

有关 SQLException 和 RemoteException 的 Java 编译错误

java - 如何使用 AspectJ 和 Tomcat 配置加载时织入?

java - 如何使用 Java 类从资源 mipmap 获取图像

python - Apache mod_wsgi Django 设置 - 禁止您无权访问此服务器上的/mysite