Tomcat修改記憶體配置
Tomcat/conf/server.xml修改配置
<connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="300" maxThreads="500" acceptCount="500" connectionTimeout="30000" enableLookups="false"/>
maxIdleTime:最大空閒時間,超過這個空閒時間,且執行緒數大於minSpareThreads的,都會被回收,預設值1分鐘(60000ms);
minSpareThreads:最小空閒執行緒數,任何情況都會存活的執行緒數,即便超過了最大空閒時間,也不會被回收,預設值4;
maxSpareThreads:最大空閒執行緒數,在最大空閒時間(maxIdleTime)內活躍過,此時空閒,當空閒時間大於maxIdleTime則被回收,小則繼續存活,等待被排程,預設值50;
maxThreads:最大執行緒數,大併發請求時,tomcat能建立來處理請求的最大執行緒數,超過則放入請求佇列中進行排隊,預設值為200;
acceptCount:當最大執行緒數(maxThreads)被使用完時,可以放入請求佇列排隊個數,超過這個數返回connection refused(請求被拒絕),一般設定和max
Threads一樣,不過這個具體需要根據自己的應用實際訪問峰值和平均值來權衡,預設值為100;
connectionTimeout:網路連線超時,假設設定為0表示永不超時,這樣設定隱患巨大,通常可設定為30000ms,預設60000ms。
Windows Tomcat允許每個程式maxThreads(最大執行緒數)2000
Linux Tomcat允許每個程式maxThreads(最大執行緒數)1000
圖解執行緒池原理
情況1:接受一個請求,此時tomcat起動的執行緒數沒有到達maxThreads,tomcat會起動一個執行緒來處理此請求。
情況2:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,tomcat會把此請求放入等待佇列,等待空閒執行緒。
情況3:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,等待佇列中的請求個數也達到了acceptCount,此時tomcat會直接拒絕此次請求,返回connection refused
一般的伺服器操作都包括量方面:1計算(主要消耗cpu),2等待(io、資料庫等)
第一種極端情況,如果我們的操作是純粹的計算,那麼系統響應時間的主要限制就是cpu的運算能力,此時maxThreads應該儘量設的小,降低同一時間內爭搶cpu的執行緒個數,可以提高計算效率,提高系統的整體處理能力。
第二種極端情況,如果我們的操作純粹是IO或者資料庫,那麼響應時間的主要限制就變為等待外部資源,此時maxThreads應該儘量設的大,這樣才能提高同時處理請求的個數,從而提高系統整體的處理能力。此情況下因為tomcat同時處理的請求量會比較大,所以需要關注一下tomcat的虛擬機器記憶體設定和linux的open file限制。
我在測試時遇到一個問題,maxThreads我設定的比較大比如3000,當服務的執行緒數大到一定程度時,一般是2000出頭,單次請求的響應時間就會急劇的增加,百思不得其解這是為什麼,四處尋求答案無果,最後我總結的原因可能是cpu線上程切換時消耗的時間隨著執行緒數量的增加越來越大,cpu把大多數時間都用來在這2000多個執行緒直接切換上了,當然cpu就沒有時間來處理我們的程式了。以前一直簡單的認為多執行緒=高效率。。其實多執行緒本身並不能提高cpu效率,執行緒過多反而會降低cpu效率。當cpu核心數<執行緒數時,cpu就需要在多個執行緒直接來回切換,以保證每個執行緒都會獲得cpu時間,即通常我們說的併發執行。所以maxThreads的配置絕對不是越大越好。
現實應用中,我們的操作都會包含以上兩種型別(計算、等待),所以maxThreads的配置並沒有一個最優值,一定要根據具體情況來配置。最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。
acceptCount的配置,我一般是設定的跟maxThreads一樣大,這個值應該是主要根據應用的訪問峰值與平均值來權衡配置的。
如果設的較小,可以保證接受的請求較快相應,但是超出的請求可能就直接被拒絕
如果設的較大,可能就會出現大量的請求超時的情況,因為我們系統的處理能力是一定的。
原文地址: https://www.linuxprobe.com/tomcat-modify-config.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2670590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tomcat記憶體馬Tomcat記憶體
- Tomcat 記憶體馬(一)Listener型Tomcat記憶體
- Tomcat 記憶體馬(二)Filter型Tomcat記憶體Filter
- MySQL InnoDB記憶體配置MySql記憶體
- ptrace attach 修改程序記憶體記憶體
- 【免殺技術】Tomcat記憶體馬-FilterTomcat記憶體Filter
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- JVM記憶體引數配置JVM記憶體
- tomcat記憶體溢位:PermGen space解決方法Tomcat記憶體溢位
- 【大頁記憶體】Oracle資料庫配置大頁記憶體記憶體Oracle資料庫
- [20180604]在記憶體修改資料(bbed).txt記憶體
- 達夢記憶體調整及修改方法記憶體
- tomcat伺服器記憶體溢位解決方法Tomcat伺服器記憶體溢位
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- 【CDB】怎樣修改PDB的記憶體引數記憶體
- Java安全之基於Tomcat的Filter型記憶體馬JavaTomcatFilter記憶體
- win10家庭版修改記憶體怎麼修改Win10記憶體
- Linux 虛擬記憶體引數配置Linux記憶體
- HBase記憶體配置及JVM優化記憶體JVM優化
- Redis記憶體淘汰策略配置翻譯Redis記憶體
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- android 模擬器 記憶體修改, 用winshark 抓包,修改資料包Android記憶體
- java程式碼實現檢視Tomcat記憶體使用情況JavaTomcat記憶體
- eclipse中啟動專案報記憶體溢位問題通過修改配置解決Eclipse記憶體溢位
- [BASIS]SAP記憶體優化配置學習記憶體優化
- [轉帖]JVM記憶體配置最佳實踐JVM記憶體
- 雲原生背景下如何配置 JVM 記憶體JVM記憶體
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- MySQL 配置InnoDB的記憶體分配器MySql記憶體
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- Python零基礎學習筆記(三十五)——記憶體修改Python筆記記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Go:記憶體管理與記憶體清理Go記憶體
- 聊聊 記憶體模型與記憶體序記憶體模型
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 遊戲記憶體對比普通記憶體區別 遊戲記憶體和普通記憶體相差大嗎?遊戲記憶體