我正在使用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不接受连接? 有任何帮助和建议吗?
答案 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。