1. 程式人生 > >Tomcat併發數優化,修改service.xml效能調優 增加最大併發連線數

Tomcat併發數優化,修改service.xml效能調優 增加最大併發連線數

可以在控制檯的啟動資訊裡看見,預設狀態下沒有被開啟nio配置,啟動時的資訊,如下: 
2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init 
資訊: Initializing Coyote HTTP/1.1 on http-8080 
2010-2-1 12:59:40 org.apache.catalina.startup.Catalina load 

修改成支援NIO的型別,配置如下: 

Java程式碼  收藏程式碼
  1. <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />  



進行測試,被開啟nio配置,啟動時的資訊,如下: 
2010-2-1 13:01:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
資訊: Using a shared selector for servlet write/read 
2010-2-1 13:01:01 org.apache.coyote.http11.Http11NioProtocol init 
資訊: Initializing Coyote HTTP/1.1 on http-8080 
這樣才能讓你真正體驗到Tomcat6下NIO給你的系統帶來的快感。 

2,修改Tomcat 6預設的maxThread 

引用開啟server.xml可以看到如下配置: 
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" /> 
官方文件預設說支援200但似乎超過40就不行了 


修改方法 : 

Java程式碼  收藏程式碼
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" maxThreads="150"/>  
引用
在tomcat配置檔案server.xml中的<Connector ... />配置中,和連線數相關的引數有: 
minProcessors:最小空閒連線執行緒數,用於提高系統處理效能,預設值為10 
maxProcessors:最大連線執行緒數,即:併發處理的最大請求數,預設值為75 
acceptCount:允許的最大連線數,應大於等於maxProcessors,預設值為100 
enableLookups:是否反查域名,取值為:true或false。為了提高處理能力,應設定為false 
connectionTimeout:網路連線超時,單位:毫秒。設定為0表示永不超時,這樣設定有隱患的。通常可設定為30000毫秒。 

其中和最大連線數相關的引數為maxProcessors和acceptCount。如果要加大併發連線數,應同時加大這兩個引數。 



3,大量的併發也意味著大量的伺服器資源,所以修改一下tomcat的JVM引數也是必要的 

錯誤提示:java.lang.OutOfMemoryError: Java heap space 

引用Windows環境下修改“%TOMCAT_HOME%\bin\catalina.bat”檔案,在檔案開頭增加如下設定:set JAVA_OPTS=-Xms256m -Xmx512m 

Linux環境下修改“%TOMCAT_HOME%\bin\catalina.sh”檔案,在檔案開頭增加如下設定:JAVA_OPTS=’-Xms256m -Xmx512m’引用
JVM設定 
堆的尺寸 
-Xmssize in bytes 
    設定Java堆的初始尺寸,預設尺寸是2097152 (2MB)。這個值必須是1024個位元組(1KB)的倍數,且比它大。(-server選項把預設尺寸增加到32M。) 
-Xmnsize in bytes 
    為Eden物件設定初始Java堆的大小,預設值為640K。(-server選項把預設尺寸增加到2M。) 
-Xmxsize in bytes 
    設定Java堆的最大尺寸,預設值為64M,(-server選項把預設尺寸增加到128M。) 最大的堆尺寸達到將近2GB(2048MB)。 

請注意:很多垃圾收集器的選項依賴於堆大小的設定。請在微調垃圾收集器使用記憶體空間的方式之前,確認是否已經正確設定了堆的尺寸。 

垃圾收集:記憶體的使用 
-XX:MinHeapFreeRatio=percentage as a whole number 
    修改垃圾回收之後堆中可用記憶體的最小百分比,預設值是40。如果垃圾回收後至少還有40%的堆記憶體沒有被釋放,則系統將增加堆的尺寸。 
-XX:MaxHeapFreeRatio=percentage as a whole number 
    改變垃圾回收之後和堆記憶體縮小之前可用堆記憶體的最大百分比,預設值為70。這意味著如果在垃圾回收之後還有大於70%的堆記憶體,則系統就會減少堆的尺寸。 
-XX:NewSize=size in bytes 
    為已分配記憶體的物件中的Eden代設定預設的記憶體尺寸。它的預設值是640K。(-server選項把預設尺寸增加到2M。) 
-XX:MaxNewSize=size in bytes 
    允許您改變初期物件空間的上限,新建物件所需的記憶體就是從這個空間中分配來的,這個選項的預設值是640K。(-server選項把預設尺寸增加到2M。) 
-XX:NewRatio=value 
    改變新舊空間的尺寸比例,這個比例的預設值是8,意思是新空間的尺寸是舊空間的1/8。 
-XX:SurvivorRatio=number 
    改變Eden物件空間和殘存空間的尺寸比例,這個比例的預設值是10,意思是Eden物件空間的尺寸比殘存空間大survivorRatio+2倍。 
-XX:TargetSurvivorRatio=percentage 
    設定您所期望的空間提取後被使用的殘存空間的百分比,預設值是50。 
-XX:MaxPermSize=size in MB 
    長久代(permanent generation)的尺寸,預設值為32(32MB)。 


有關JVM的引數設定可參考這個地址:http://daichangfu.iteye.com/blog/893844 


web server允許的最大連線數還受制於作業系統的核心引數設定,通常Windows是2000個左右,Linux是1000個左右。Unix中如何設定這些引數,請參閱Unix常用監控和管理命令 

tomcat的幾種connector方式簡介

Tomcat的四種基於HTTP協議的Connector效能比較
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"                          

connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443"/>
<Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<Connector executor="tomcatThreadPool"
               port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />
我們姑且把上面四種Connector按照順序命名為 NIO, HTTP, POOL, NIOP
為了不讓其他因素影響測試結果,我們只對一個很簡單的jsp頁面進行測試,這個頁面僅僅是輸出一個Hello World。假設地址是 http://tomcat1/test.jsp
我們依次對四種Connector進行測試,測試的客戶端在另外一臺機器上用ab命令來完成,測試命令為: ab -c 900 -n 2000 http://tomcat1/test.jsp ,最終的測試結果如下表所示(單位:平均每秒處理的請求數):

NIO HTTP POOL NIOP
281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363

由這五組資料不難看出,HTTP的效能是很穩定,但是也是最差的,而這種方式就是Tomcat的預設配置。NIO方式波動很大,但沒有低於280 的,NIOP是在NIO的基礎上加入執行緒池,可能是程式處理更復雜了,因此效能不見得比NIO強;而POOL方式則波動很大,測試期間和HTTP方式一樣,不時有停滯。
由於linux的核心預設限制了最大開啟檔案數目是1024,因此此次併發數控制在900。
儘管這一個結果在實際的網站中因為各方面因素導致,可能差別沒這麼大,例如受限於資料庫的效能等等的問題。

相關推薦

Tomcat併發優化修改service.xml效能調 增加併發連線

可以在控制檯的啟動資訊裡看見,預設狀態下沒有被開啟nio配置,啟動時的資訊,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init 資訊: Initializing Coyote HTTP/1.1 on http-8080 2010

Tomcat修改service.xml效能調 增加併發連線

 詳細配置: <Connector executor="tomcatThreadPool"                port="80" protocol="HTTP/1.1"                 connectionTimeout="20000"

伺服器TCP連線調彙總 BIO,NIO,AIO的理解

啟動執行緒數: 啟動執行緒數=【任務執行時間/(任務執行時間-IO等待時間)】*CPU核心數 最佳啟動執行緒數和CPU核心數量成正比,和IO阻塞時間成反比。如果任務都是CPU計算型任務,那麼執行緒數最多不超過CPU核心數,因為啟動再多執行緒,CPU也來不及排程;相反如果是任務需要等待磁碟操作,網路響應,那

JVM效能調的6步驟及關鍵調引數詳解

JVM效能調優的6大步驟,及關鍵調優引數詳解 JVM效能調優方法和步驟 1.監控GC的狀態 2.生成堆的dump檔案 3.分析dump檔案 4.分析結果,判斷是否需要優化 5.調整GC型別和記憶體分配 6.不斷分析

遠端桌面提示 “終端伺服器超出了允許連線” 的解決方法

使用 windows 的遠端桌面連線 windows server 系統,有時候會出現 “終端伺服器超出了最大允許連線數” 的問題。 1 分析 因為 windows 終端服務的預設連結數為 2 個連結,而且當登入桌面後是直接關閉遠端桌面視窗,那麼實際上終

單機TCP連線

今天寫程式用到epoll的模型,翻出原先的程式碼跑了一下,看到原來define的最大的處理使用者上限,感覺有些不妥,所以決定測試一下我的ubuntu 16.04,1G記憶體的單機上究竟可以建立多少個連線。雖然網上有很多這方面的案例,但是我還是決定自己測試一下,印象深刻,對問題

linux系統TCP連線限制

本部落格為轉載,原文請參見<a href="http://blog.51cto.com/jschu/1755279">http://blog.51cto.com/jschu/1755279</a> web伺服器和cache伺服器,高併發下,socke

Windows 下單機TCP連線

在做Socket 程式設計時,我們經常會要問,單機最多可以建立多少個 TCP 連線,本文將介紹如何調整系統引數來調整單機的最大TCP連線數。 Windows 下單機的TCP連線數有多個引數共同決定,下面一一介紹: 最大TCP連線數 [HKEY_LOCAL_MACHI

Tomcat 7併發連線的正確修改方法

這是個很簡單的問題,但是搜了一圈,發現大家都寫錯了。所以這裡總結一下: 幾乎所有的中文網頁都介紹,要修改Tomcat的預設最大併發連線數,應該進行如下設定(實際上這些步驟是錯誤的): ----------------------------------------

Apache優化修改併發連線

Apache是一個跨平臺的web伺服器,由於其簡單高效、穩定安全的特性,被廣泛應用於計算機技術的各個領域。現在,Apache憑藉其龐大的使用者數,已成為使用者數排名第一的web伺服器。 儘管如此,在實際的生產環境中,我們仍然不可能直接使用預設配置的Apache來充當伺服

GA:利用GA對一元函進行優化過程求x∈(0,10)中y的值——Jason niu

title variable ati 過程 優化 mea ... http [] x = 0:0.01:10; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel(‘independent variable

mysql 檢視連線狀態併發

show status like '%max_connections%'; ##mysql最大連線數set global max_connections=1000 ##重新設定show variables like '%max_connections%'; ##查詢資料庫當前設定的最大連線數 show gl

2018年最後一天 VsCode中執行nodeJs程式碼的簡單方法 Pgsql和Mysql的對比 Tomcat併發 Spring AOP不起作用原因

發現2017的隨筆總結依舊適用,想堅持每天寫點東西分享,但感覺每天能原創分享的內容真的不多,尤其是要把自己想分享的內容寫清楚也需要額外花費很多的時間,這讓本來平時就工作比較忙的自己疲於應付,於是乎就轉載自己看到的一些好的文章分享,甚至有些文章自己都沒完全看完就發,湊合著完成了任務,但自己的成就感很低。因此我不

Tomcat效能併發

當一個程序有 500 個執行緒在跑的話,那效能已經是很低很低了。Tomcat 預設配置的最大請求數是 150,也就是說同時支援 150 個併發,當然了,也可以將其改大。當某個應用擁有 250 個以上併發的時候,應考慮應用伺服器的叢集。具體能承載多少併發,需要看硬體的配置,C

Java效能化二:併發程式設計優化開發必備優化技巧!

一、JDK 併發資料結構: 1、併發 List : Vector 或者 CopyOnWriteArrayList 是兩個執行緒安全的 List 實現。 CopyOnWriteArrayList 很好的利用了物件的不變性,在沒有對物件進行寫操作之前,由於物件未發生改變,因此不需要加鎖。而在試圖

Qt實用技巧:Qt併發伺服器通訊受同一時刻執行緒限制(筆者本本同一時刻600多)

需求        預言專案需要寫個qt伺服器,終端與qt伺服器完成socket通訊,因存在多個裝置,單個傳輸檔案大小比較大,所以做多執行緒併發。實現原理        客戶端:固定client的執行緒數量,單個執行緒按照設定的間隔不斷髮送資料給伺服器,並接收伺服器的執行緒指

修改XP併發連線的方法(非大半開連線

最近寫了一個EPOLL的server,正在用WINDOWS下的多執行緒程式做壓力測試,一個程序開500個執行緒,連線到SERVER併發送少量資料,但在XP系統上,在開到第8個程序的時候連線成功數目總是小於500,也就是說整個系統能供使用者主動開啟的連線數不到4000個,在網上

MySQL高併發優化效能調要這麼來~

一、資料庫結構的設計 表的設計具體注意的問題: 1、資料行的長度不要超過 8020 位元組,如果超過這個長度的話在物理頁中這條資料會佔用兩行從而造成儲存碎片,降低查詢效率。 2、能夠用數字型別的欄位儘量選擇數字型別而不用字串型別的(電話號碼),這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎

設定springboot自帶tomcat連線併發

從原始碼來看,最大連線數和最大併發數預設是10000和200 可以通過工程下的application.yml配置檔案來改變這個值 server:   tomcat:     uri-enco

Tomcat的配置併發連線

幾乎所有的中文網頁都介紹,要修改Tomcat的預設最大併發連線數,應該進行如下設定(實際上這些步驟是錯誤的): -------------------------------------------- 在tomcat配置檔案server.xml中的<Connec