一个Tomcat最多支持多少用户的并发?

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⼀个Tomcat最多⽀持多少⽤户的并发?
Tomcat 默认配置的最⼤请求数是150,也就是说同时⽀持150 个并发,当然了,也可以将其改⼤。

当某个应⽤拥有250 个以上并发的时候,应考虑应⽤服务器的集群。

具体能承载多少并发,需要看硬件的配置,CPU 越多性能越⾼,分配给JVM 的内存越多性能也就越⾼,但也会加重GC 的负担。

操作系统对于进程中的线程数有⼀定的限制:
Windows 每个进程中的线程数不允许超过2000
Linux 每个进程中的线程数不允许超过1000
另外,在Java 中每开启⼀个线程需要耗⽤1MB的JVM 内存空间⽤于作为线程栈之⽤。

Tomcat的最⼤并发数是可以配置的,实际运⽤中,最⼤并发数与硬件性能和CPU数量都有很⼤关系的。

更好的硬件,更多的处理器都会
使Tomcat⽀持更多的并发。

Tomcat 默认的HTTP 实现是采⽤阻塞式的Socket 通信,每个请求都需要创建⼀个线程处理。

这种模式下的并发量受到线程数的限制,但对于Tomcat 来说⼏乎没有BUG 存在了。

Tomcat 还可以配置NIO ⽅式的Socket通信,在性能上⾼于阻塞式的,每个请求也不需要创建⼀个线程进⾏处理,并发能⼒⽐前者⾼。

但没有阻塞式的成熟。

这个并发能⼒还与应⽤的逻辑密切相关,如果逻辑很复杂需要⼤量的计算,那并发能⼒势必会下降。

如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是⾮常⾼的。

对于单台数据库服务器来说,允许客户端的连接数量是有限制的。

并发能⼒问题涉及整个系统架构和业务逻辑。

系统环境不同,Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。

并发量的差异还是蛮⼤的。

Tomcat接收请求的⽅式
Tomcat⽀持三种接收请求的处理⽅式:BIO、NIO、APR。

1>、Bio⽅式,阻塞式I/O操作即使⽤的是传统Java I/O操作,Tomcat7以下版本默认情况下是以bio模式运⾏的,由于每个请求都要创建⼀个线程来处理,线程开销较⼤,不能处理⾼并发的场景,在三种模式中性能也最低
配置如下(tomcat安装⽬录下的/conf/server.xml):
tomcat启动如下,看到h ttp-bio-8080便是bio模式:
2>、Nio⽅式,是 1.4及后续版本提供的⼀种新的I/O操作⽅式(即j ava.nio包及其⼦包),是⼀个基于缓冲区、并能提供⾮阻塞I/O操作
的Java API,它拥有⽐传统I/O操作(bio)更好的并发运⾏性能。

tomcat 8版本及以上默认nio模式
配置如下:
tomcat启动如下,看到http-nio-8080便是nio模式:
总结:
Tomcat配置
Tomcat/conf/server.xml修改配置
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443"
URIEncoding="UTF-8"
minSpareThreads="100"
maxSpareThreads="500"
maxThreads="1000"
acceptCount="700"
connectionTimeout="30000"
enableLookups="false"/>
参数说明
maxIdleTime:最⼤空闲时间,超过这个空闲时间,且线程数⼤于minSpareThreads的,都会被回收,默认值1分钟(60000ms);minSpareThreads:最⼩空闲线程数,任何情况都会存活的线程数,即便超过了最⼤空闲时间,也不会被回收,默认值4;maxSpareThreads:最⼤空闲线程数,在最⼤空闲时间(maxIdleTime)内活跃过,此时空闲,当空闲时间⼤于maxIdleTime则被回收,⼩
则继续存活,等待被调度,默认值50;
maxThreads:最⼤线程数,⼤并发请求时,tomcat能创建来处理请求的最⼤线程数,超过则放⼊请求队列中进⾏排队,默认值为200;acceptCount:当最⼤线程数(maxThreads)被使⽤完时,可以放⼊请求队列排队个数,超过这个数返回connection refused(请求被拒绝),⼀般设置和maxThreads⼀样,不过这个具体需要根据⾃⼰的应⽤实际访问峰值和平均值来权衡,默认值为100;connectionTimeout:⽹络连接超时,假设设置为0表⽰永不超时,这样设置隐患巨⼤,通常可设置为30000ms,默认60000ms。

Windows Tomcat允许每个进程maxThreads(最⼤线程数)2000
Linux Tomcat允许每个进程maxThreads(最⼤线程数)1000。

相关文档
最新文档