tomcat7 1000併發量配置以及配置優化
作者:_NullPointer
出處:https://www.cnblogs.com/renwei/
首先,修改tomcat/conf/server.xml配置檔案。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="400" /> <Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false" redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000" />
其次,修改tomcat/bin/catalina.bat配置檔案為以下。
rem --------------------------------------------------------------------------- rem Guess CATALINA_HOME if not defined 之間的位置,不要加到那些if裡面去了,否則不一定會生效. set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m 如果有疑問.可以用 echo %JAVA_OPTS%>d:\JAVA_OPTS.log
主要修改了maxThreads、acceptCount。Google資料說“如果要加大併發連線數,應同時加大這兩個引數。
1.tomcat的執行緒數量有待商榷。 thread太多,導致切換過多,效能下降嚴重。這個數量應該是你單個機器的承載能力, 壓力測試下得出的結果。 不可任意加大。一般情況下, 256-512個已經非常高的數值了。
2.JVM引數配置, 你這個會導致嚴重的stop world時間。 如果你想應用響應平緩, 一般看你的應用對於臨時記憶體的需求, 一般來說, -Xmn128-256m就夠了, 這個要看你的停頓時間的計算, 你把gc的收集打印出來,再研究下, 最大停頓時間。 這個我的BLOG說的比較詳細。 你去看看吧。
3.-Xss128k 這個引數, 建議你設定成256k, 不然容易造成不夠用, 特別是你的程式有比較多的遞迴行為。 比如排序。
4.另外如果想提高記憶體的效能, 你可以看看大記憶體設定.不是很好操作, 我沒有測試過。
5.在效能提升上, 我建議你使用Linux kernel 2.6.22+版本, JAVA6 是不是32位的不是很要緊。這個提升是非常大的。
32位上, 你對JAVA能配置的記憶體理解是錯誤的。 一般來說1。5G的配置, 都可能導致JVM程序出問題, 這個測試我做過, 一般高壓力執行2-3天后, JVM會CRASH, 我不是很明白為什麼, 有可能JAVA5在CMS的問題導致的。一般建議在32位下配置記憶體為1280m.
===========================================================
Heap Size 最大不要超過可用實體記憶體的80%,一般的要將-Xms和-Xmx選項設定為相同堆記憶體分配 (訪問量比較大時設為一致)。
JVM初始分配的記憶體由-Xms指定,預設是實體記憶體的1/64;JVM最大分配的記憶體由-Xmx指定,預設是實體記憶體的1/4。預設空餘堆記憶體小於 40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆記憶體大於70%時,JVM會減少堆直到-Xms的最小限制。因此伺服器一般設定-Xms、 -Xmx相等以避免在每次GC 後調整堆的大小。
非堆記憶體分配
JVM使用-XX:PermSize設定非堆記憶體初始值,預設是實體記憶體的1/64;由XX:MaxPermSize設定最大非堆記憶體的大小,預設是實體記憶體的1/4。
JVM記憶體限制(最大值)
首先JVM記憶體限制於實際的最大實體記憶體(廢話!呵呵),假設實體記憶體無限大的話,JVM記憶體的最大值跟作業系統有很大的關係。簡單的說就32位 處理器雖然可控記憶體空間有4GB,但是具體的作業系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G- 2G,Linux系統下為2G-3G),而64bit以上的處理器就不會有限制了。(使用java命令測試出支援的最大值)。
Tomcat的server.xml中Context元素的以下引數應該怎麼配合適 ?
<Connector port="8080"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
/>
(第一種方法)
maxThreads="150" 表示最多同時處理150個連線 ;
minSpareThreads="25" 表示即使沒有人使用也開這麼多空執行緒等待 ;
maxSpareThreads="75" 表示如果最多可以空75個執行緒,例如某時刻有80人訪問,之後沒有人訪問了,則tomcat不會保留80個空執行緒,而是關閉5個空的;
acceptCount="100" 當同時連線的人數達到maxThreads時,還可以接收排隊的連線,超過這個連線的則直接返回拒絕連線。
根據你的配置建議
maxThreads="500"
minSpareThreads="100" 如果你的網站經常訪問量都很大的話,預設就開比較大
maxSpareThreads="300"
acceptCount="100"
這只是說你的伺服器可以支援這麼多使用者,但還要看你安裝了哪些東西,還有你的程式是否足夠高效率。
(第二種方法)
1.如何加大tomcat連線數
在tomcat配置檔案server.xml中的配置中,和連線數相關的引數有:
minProcessors:最小空閒連線執行緒數,用於提高系統處理效能,預設值為10;
maxProcessors:最大連線執行緒數,即:併發處理的最大請求數,預設值為75
acceptCount:允許的最大連線數,應大於等於maxProcessors,預設值為100
enableLookups:是否反查域名,取值為:true或false。為了提高處理能力,應設定為false;
connectionTimeout:網路連線超時,單位:毫秒。設定為0表示永不超時,這樣設定有隱患的。通常可設定為30000毫秒。
其中和最大連線數相關的引數為maxProcessors和acceptCount。如果要加大併發連線數,應同時加大這兩個引數。
web server允許的最大連線數還受制於作業系統的核心引數設定,通常Windows是2000個左右,Linux是1000個左右。Unix中如何設定這些引數,請參閱Unix常用監控和管理命令。
tomcat4中的配置示例:
<Connector port="8080"
minProcessors="10"
maxProcessors="1024"
enableLookups="false"
redirectPort="8443"
acceptCount="1024"
debug="0"
connectionTimeout="30000" />
對於其他埠的偵聽配置,以此類推。
2. tomcat中如何禁止列目錄下的檔案
在{tomcat_home}/conf/web.xml中,把listings引數設定成false即可,如下:
...
listings
false