美文网首页
一个Tomcat最多支持多少用户的并发?

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

作者: 虾米咬小米 | 来源:发表于2020-08-13 14:56 被阅读0次

    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):
     ![image](https://img.haomeiwen.com/i1094787/6bdc7b683a3b0b90.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      tomcat启动如下,看到http-bio-8080便是bio模式:
    
      ![image](https://img.haomeiwen.com/i1094787/009931e091235028.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      2>、Nio方式,是[Java SE](http://lib.csdn.net/base/12 "Java SE知识库") 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包),是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥        有比传统I/O操作(bio)更好的并发运行性能。tomcat 8版本及以上默认nio模式
    
     配置如下:
    
    ![image](https://img.haomeiwen.com/i1094787/40aa509d199ebd39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      tomcat启动如下,看到http-nio-8080便是nio模式:
    
     ![image](https://img.haomeiwen.com/i1094787/68995a0d65620651.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      3>、apr模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。 
    

    启用这种模式稍微麻烦一些,需要安装一些依赖库。具体的怎么安装在此就不讲解,想了解的可以百度

    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**

    相关文章

      网友评论

          本文标题:一个Tomcat最多支持多少用户的并发?

          本文链接:https://www.haomeiwen.com/subject/qenbdktx.html