Tomcat的配置和優化-02
阿新 • • 發佈:2018-11-12
1.Tomcat之併發優化:
1.1位置
/opt/tomcat7/conf下的server.xml檔案中<Connector>節點的配置優化,記得先備份
1.2優化
- 標準版
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />
- 複雜版
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5" useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain" redirectPort="8443"/>
注意:坑爹
指定JDK路徑動態配置
一般情況下我們都是讓Tomcat根據配置的java_home環境變數自動去找jdk路徑,
但當同一臺伺服器有不同的服務,且使用不同的jdk版本是就會出現問題。
我們可以在catalina.sh指令碼檔案(windows系統下為catalina.bat)中動態設定JAVA_HOME解決此問題。
1.3引數逐項說明
URIEncoding=”UTF-8” 使得tomcat可以解析含有中文名的檔案的url,在server.xml檔案的Connector標籤中 增加URIEncoding="UTF-8"屬性,解決中文引數亂碼問題。 minSpareThreads:最小備用執行緒數,tomcat啟動時的初始化的執行緒數,預設10. maxSpareThreads enableLookups disableUploadTimeout:connectionTimeout:網路連線超時,單位毫秒。設定為 -1 表示永不超時 connectionTimeout acceptCount maxThreads maxProcessors minProcessors useURIValidationHack:減少它對一些url的不必要的檢查從而減省開銷,為提高效能可以設定為false compression compressionMinSize:compressionMinSize="2048" 啟用壓縮的輸出內容大小,這裡面預設為2KB compressableMimeType:compressableMimeType:哪些型別需要壓縮,預設是text/html,text/xml,text/plain
enableLookups:
如果希望呼叫request.getRemoteHost()進行DNS查詢,以返回遠端客戶的實際主機名,將enableLookups設為true。
如果希望忽略DNS查詢,僅僅返回IP地址,設為false(這樣提高了效能)。
預設情況下,DNS查詢是使能的。
一句話:是否反查域名,取值為: true 或 false 。為了提高處理能力,應設定為 false
disableUploadTimeout:
disableUploadTimeout="true",
類似於Apache中的keeyalive一樣,是否需要tomcat容器單獨設定上傳時間限制,
這裡是不用,還是使用標準的,不去給上傳的附件單獨做超時設定。
acceptCount:
acceptCount是當執行緒數達到maxThreads後,後續請求會被放入一個等待佇列,這個acceptCount是
這個佇列的大小,如果這個佇列也滿了,就直接refuse connection
一句話:acceptCount:當處理任務的執行緒數達到最大時,接受排隊的請求個數,預設100
maxThreads:
maxThreads:最大執行緒數,即同時處理的任務個數,預設值為200
Tomcat使用執行緒來處理接收的每個請求。這個值表示Tomcat可建立的最大的執行緒數,
即最大併發數。
保守推薦:600---900
minProcessors:
在 Java中執行緒是程式執行時的路徑,是在一個程式中與其它控制執行緒無關的、能夠獨立執行的程式碼段。它們共享相同的地址空間。
多執行緒幫助程式設計師寫出CPU最大利用率的高效程式,使空閒時間保持最低,從而接受更多的請求。
通常Windows是1000個左右,Linux是2000個左右。
compression:
compression :設定是否開啟GZip壓縮
HTTP 壓縮可以大大提高瀏覽網站的速度,它的原理是,在客戶端請求網頁後,從伺服器端將網頁檔案壓縮,再下載到客戶端,
由客戶端的瀏覽器負責解壓縮並瀏覽。相對於普通的瀏覽過程HTML,CSS,Javascript , Text ,它可以節省40%左右的流量。更為
重要的是,它可以對動態生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率驚人。
1.4超時控制
修改conf/web.xml配置檔案,設定session-timeout的值(單位:分鐘)
注意:
最後不要忘了把8443埠的地方也加上同樣的配置,因為如果我們走https協議的話,
我們將會用到8443埠這個段的配置
2.Tomcat之記憶體優化
檢視%TOMCAT_HOME%\logs資料夾下,日誌檔案是否有記憶體溢位錯誤
1.錯誤提示:java.lang.OutOfMemoryError: Java heap space
導致原因:
Tomcat預設可以使用的記憶體為128MB,在較大型的應用專案中,這點記憶體是不夠的,有可能導致系統無法執行。
常見的問題是報Tomcat記憶體溢位錯誤,Out of Memory(系統記憶體不足)的異常,從而導致客戶端顯示500錯誤,
一般調整Tomcat的使用記憶體即可解決此問題。
public static void main(String[] args)
{
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+" M");
byte[] byteArray = new byte[1*1024*1024*650];
System.out.println("#######3");
}
windows環境下修改:
“%TOMCAT_HOME%\bin\catalina.bat”檔案,在檔案開頭增加如下設定:
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -
XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -
XX:NewRatio=2 -XX:+DisableExplicitGC
Linux環境下修改:
“%TOMCAT_HOME%\bin\catalina.sh”檔案,在檔案開頭增加如下設定:
JAVA_OPTS=-Xms2048m -Xmx2048m
2.錯誤提示:java.lang.OutOfMemoryError: PermGen space
導致原因:
PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存區域,這塊記憶體主要是被JVM存
放Class和Meta資訊的,Class在被Loader時就會被放到PermGen space中,它和存放類例項(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程式執行期對PermGen space進行清理,所以如果你的應用中有很CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web伺服器對JSP進行pre-compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm預設的大小(4M)那麼就會產生此錯誤資訊了。
windows環境下修改:
“%TOMCAT_HOME%\bin\catalina.bat”檔案,在檔案開頭增加如下設定:
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m - XX:MaxPermSize=256m
Linux環境下修改:
“%TOMCAT_HOME%\bin\catalina.sh”檔案,在檔案開頭增加如下設定:
export JAVA_OPTS=-Xms256m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m
XX:MaxPermSize=256m