4

我在 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
4

3 回答 3

2

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

每个传入的请求在该请求期间都需要一个线程。如果收到的并发请求多于当前可用的请求处理线程可以处理的数量,则将创建额外的线程,直至配置的最大值(maxThreads属性的值)。如果接收到更多的同时请求,它们会堆积在连接器创建的服务器套接字中,直到配置的最大值(acceptCount属性的值)。任何进一步的并发请求都将收到“连接被拒绝”错误,直到有可用资源来处理它们。

参考:http: //tomcat.apache.org/tomcat-7.0-doc/config/http.html

于 2013-09-05T14:57:40.213 回答
1

谢谢你们!!

问题实际上出在网络上,当我们使用不同的 IP 地址(IP 欺骗)进行测试时,所有请求都是成功的。网络认为这是一次 DoS 攻击。

谢谢大家。我曾尝试过 maxThreads 和 acceptCount 并在 Linux 中做了很多调整。

所以学习是:从位于同一区域的服务器进行性能测试。

于 2013-10-22T13:06:47.117 回答
0

可能 1000 个并发请求(在一秒钟内)是不现实的。更好的测试是在一段时间内分发 1000 个并发请求。

eg:图片显示在60秒的时间内执行了100个请求,即几乎每秒两个请求。

在此处输入图像描述

于 2013-09-05T13:06:54.980 回答