如何正确配置Tomcat no of threads和jmeter ramp up period

时间:2014-10-14 03:46:34

标签: java tomcat7 jmeter

我正在使用jmeter进行负载测试.jmeter的配置参数如下

没有线程= 299 加速期= 1 循环计数= 1

这是我在tomcat中的线程配置。我正在使用tomcat 7

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="2500" minSpareThreads="2400"/>

我使用了4 GB的ram

MYsql max connection:150

汇集配置

<prop key="hibernate.c3p0.acquire_increment">90</prop>
                <prop key="hibernate.c3p0.idle_test_period">28690</prop>
                <prop key="hibernate.c3p0.max_size">147</prop>
                <prop key="hibernate.c3p0.max_statements">100</prop>
                <prop key="hibernate.c3p0.min_size">147</prop>
                <prop key="hibernate.c3p0.timeout">1800</prop>          
                <prop key="hibernate.c3p0.preferredTestQuery">select 1</prop> 

这是我的tomcat配置

-Xms1024m -Xmx1024m -XX:MaxPermSize=3g

当没有线程等于298时没有问题。但是,当它增加到299时我得到以下错误 org.apache.http.conn.HttpHostConnectException:与http://localhost:8080的连接被拒绝

但是,当我将加速期延长至 10 时,则没有错误。

因此,似乎问题与tomcat线程和jmeter的上升周期有关。

如果加速期间越高,则没有例外。但是,当加速期间较低时,我得到例外。

在我的情况下,我配置了minSpareThreads = 2400,然后据我所知,这些最小的线程数始终可用。

如果在我的情况下并发请求以1为间隔命中tomcat,为什么接受与tomcat的连接有问题?

在我的情况下,没有一个线程= 299哪个高于最大线程所以仍然为什么tomcat不接受连接?         有任何帮助和建议吗?

1 个答案:

答案 0 :(得分:0)

我知道它很晚但我有一个非常熟悉的问题:

通常,Tomcat使用一个所谓的HTTP-Connector来处理所有请求。默认情况下,它在Tomcat 7中使用阻塞IO(BIO)连接器。在Tomcat 8中,默认情况下使用非阻塞。

BIO-Connector每个连接使用1个线程。在请求完成之前,线程将不可用于任何其他进程( - &gt;阻塞)。另一方面,Non Blocking可以处理每个线程的许多连接,通常只有cpu内核的线程数。这样可以防止你的线程耗尽,因为它不会耗尽你的线程池(目前这是非常荒谬的。)

这个说法:当你每秒面对很多请求时,你使用websockets或长轮询你最好切换到NIO-HTTP-Connector。虽然如果你的请求数量适中,它的吞吐量会略微降低,但我们发现它的扩展性要好得多。 (在websockets或longpolling的情况下,它实际上是唯一真正的解决方案!)。

要更改连接器,请转到tomcat的server.xml并查找连接器条目。应该有2 - HTTP和HTTPs基本上。 xml条目具有协议属性,设置为HTTP/1.1或类似org.apache.coyote.http11.Http11Protocol。将两个条目都更改为org.apache.coyote.http11.Http11NioProtocol以启用NIO-Connector。重启Tomcat。