1. 程式人生 > >Tomcat的配置和優化-02

Tomcat的配置和優化-02

續上一篇

1.Tomcat之併發優化:

1.1位置

/opt/tomcat7/conf下的server.xml檔案中<Connector>節點的配置優化,記得先備份

   

 1.2優化

  1. 標準版
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
 maxThreads="600"
 minSpareThreads="100"
 maxSpareThreads="500"
 acceptCount="700"
 connectionTimeout="20000"
 redirectPort="8443" />

 

  1. 複雜版
<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