一個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支持三種接收請求的處理方式:BIONIOAPR  

      1>、Bio方式,阻塞式I/O操作即使用的是傳統Java I/O操作,Tomcat7以下版本默認情況下是以bio模式運行的,由於每個請求都要創建一個線程來處理,線程開銷較大,不能處理高並發的場景,在三種模式中性能也最低

      配置如下(tomcat安裝目錄下的/conf/server.xml):
     

      tomcat啟動如下,看到http-bio-8080便是bio模式:

      

  

      2>、Nio方式,是Java SE 1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包),是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,它擁        有比傳統I/O操作(bio)更好的並發運行性能。tomcat 8版本及以上默認nio模式

     配置如下:

    

      tomcat啟動如下,看到http-nio-8080便是nio模式

     

      3>、apr模式:簡單理解,就是從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和響應性能, 也是Tomcat運行高並發應用的首選模式。 
啟用這種模式稍微麻煩一些,需要安裝一些依賴庫, 而apr的本質就是使用jni技術調用操作系統底層的IO接口,所以需要提前安裝所需要的依賴,首先是需要安裝openssl和apr。具體的怎么安裝在此就不講解,想了解的可以百度,可以參考https://www.cnblogs.com/freeweb/p/6430053.html

 總結:

      三者的性能測試結果可以參考:https://blog.csdn.net/mrleeapple/article/details/80420395

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM