Tomcat-connector的微调(2): maxConnections, maxThreads

1) 最大连接数

tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

在tomcat里通过一个计数器来控制最大连接,比如在Endpoint的Acceptor里大致逻辑如下:

while (running) {
    ...
    //if we have reached max connections, wait
    countUpOrAwaitConnection(); //计数+1,达到最大值则等待

    ...
    // Accept the next incoming connection from the server socket
    socket = serverSock.accept();

    ...
    processSocket(socket);

    ...
    countDownConnection(); //计数-1
    closeSocket(socket);
}

计数器是通过LimitLatch锁来实现的,它内部主要通过一个java.util.concurrent.locks.AbstractQueuedSynchronizer的实现来控制。

我们在server.xml里对Connector增加maxConnections="1"这个参数,然后模拟2个连接:

for i in {1..2}; do (
    {
        echo -ne "POST /main HTTP/1.1\nhost: localhost:7001\n\n";
        sleep 20
    } | telnet localhost 7001
)&;  done

然后通过jstack可以看到acceptor线程阻塞在countUpOrAwaitConnection方法上:

"http-bio-7001-Acceptor-0" #19 daemon prio=5 os_prio=31 tid=0x00007f8acbcf1000 nid=0x6903 waiting on condition [0x0000000129c58000]
 java.lang.Thread.State: WAITING (parking)
 at sun.misc.Unsafe.park(Native Method)
 - parking to wait for  <0x0000000740353f40> (a org.apache.tomcat.util.threads.LimitLatch$Sync)    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
 at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
 at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
 at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
 at org.apache.tomcat.util.threads.LimitLatch.countUpOrAwait(LimitLatch.java:115)
 at org.apache.tomcat.util.net.AbstractEndpoint.countUpOrAwaitConnection(AbstractEndpoint.java:755)
 at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:214)
 at java.lang.Thread.run(Thread.java:745)

对于NIO和APR的最大连接数默认值比较大,适合大量连接的场景;如果是BIO模式线程池又设置的比较小的话,就需要注意一下连接的处理是否够快,如果连接处理的时间较长,或新涌入的连接量比较大是不太适合用BIO的,调大BIO的线程数也可能存在利用率不高的情况

2) 最大线程数

如果没有对connector配置额外的线程池的话,maxThreads参数用来设置默认线程池的最大线程数。tomcat默认是200,对一般访问量的应用来说足够了。 

时间: 2024-10-21 16:57:09

Tomcat-connector的微调(2): maxConnections, maxThreads的相关文章

修改Tomcat Connector运行模式,优化Tomcat运行性能

omcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat Connector的运行模式来提高Tomcat的运行性能呢? 下面,我们先大致了解Tomcat Connector的三种运行模式. bio bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统

tomcat server.xml &amp;lt;Connector&amp;gt;元素配置

Connector元素:由Connector接口定义.Connector元素代表与客户程序实际的交互,它负责接收客户请求,以及向客户返回响应结果. 下面来看一下Connector元素的配置 <Connector port="80" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="100" e

如何为一个高负荷站点配置tomcat连接器(connector)

引言 最近正好要用到这些内容,因此就找了一篇比较有分量的文章,思来想去,还是尝试写一下译文吧.其实LZ的英语是非常烂的(四级没过的LZ眼泪掉下来),因此这篇文章翻译的水平LZ自己也不敢恭维.各位猿友大致参考一下即可,其中[]符号是LZ的标注,()内的是原文.如果各位有哪里实在看不明白的话,可能是LZ翻译的问题,各位猿友可以去看原文的内容,地址:http://people.apache.org/~mturk/docs/article/ftwai.html. 摘要 倘若你想实现最大的性能和稳定性的话

Tomcat-connector的微调(1): acceptCount参数

对于acceptCount这个参数,含义跟字面意思并不是特别一致(个人感觉),容易跟maxConnections,maxThreads等参数混淆:实际上这个参数在tomcat里会被映射成backlog: static { replacements.put("acceptCount", "backlog"); replacements.put("connectionLinger", "soLinger"); replacemen

tomcat/resin使用全局数据库连接池资源

我比较倾向于直接在web应用中配置数据库连接,例如使用struts或者是Hibernate的连接池,这样的好处是无需了解不同的应用服务器在配置数据源的差别,应用实施的时候比较简单. 所以我最近的一些项目都是采用这种架构,但是这种方式有一些不足的就是当应用服务器配置了多个应用,而这些应用使用同一个数据库,这就会导致不必要的资源浪费,也就是同一个应用服务器中存在针对同一个数据库的多个连接池. 也就是说我们希望每个应用服务器只有一个连接池的实例,在这个应用服务器上运行的所有项目都可以使用这个连接池,下

实例讲解Apache+tomcat+ssl配置

apache     我的运行环境:Windows2003 Server SP4 + J2SDK1.5.0 + Apache2.0.54 + Tomcat5.5.9     **准备软件:    1.安装 Apache 2.0.54    2.Tomcat 5.5.14    3.Jk2连接器(mod_jk2.so)      一:配置Apache和tomcat     Apache安装在d:\Apache2 下,监听端口 80:    Tomcat在D:\Tomcat51 下,监听端口 808

TomCat 多虚拟站点配置

站点 在网络上找了许久,没有一个真正可以解决TomCat多虚拟站点的配置问题的,经过试验和参考官方网站资料,终于解决了这个问题. 参考资料:Apache Tomcat文档http://tomcat.apache.org/tomcat-5.0-doc/config/host.html 在文中有这么一段话: One or more Host elements are nested inside an Engine element. Inside the Host element, you can n

Tomcat 安全配置与性能优化

Tomcat 安全配置与性能优化 Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080 <netkiller@msn.com> 版权 2011, 2012, 2013 http://netkiller.github.com $Date: 2013-07-23 11:48:13 +0800 (Tue, 23 Jul 2013) $ 摘要 我的系列文档 Netk

Java 8 + Tomcat 8

Tomcat 安全配置与性能优化 http://netkiller.github.io/journal/tomcat.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)     中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明. 文档出处: http://netkiller.gith