1. 程式人生 > >優化tomcat配置(從內存、並發、緩存4個方面)優化

優化tomcat配置(從內存、並發、緩存4個方面)優化

公司 應該 adt 打開 mx2 type 內存 主機名 socket

Tomcat內存優化

Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數。
JAVA_OPTS參數說明
-server 啟用jdk 的 server 版;
-Xms Java虛擬機初始化時的最小內存;
-Xmx java虛擬機可使用的最大內存;
-XX: PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域
服務器參數配置

現公司服務器內存一般都可以加到最大2G ,所以可以采取以下配置:

JAVA_OPTS="-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

JAVA_OPTS="-server -Xms2048m -Xmx6144m"

配置完成後可重啟Tomcat 。

Tomcat並發優化

[調整連接器connector的並發處理能力]

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

web server允許的最大連接數還受制於操作系統的內核參數設置,通常 Windows 是 2000 個左右, Linux 是 1000 個左右。

protocol:Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果這個用不了,就用下面那個),Tomcat 6、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol

maxThreads 客戶請求最大線程數 ,表示tomcat所能創建的最大線程數,即tomcat的最大並發能力,tomcat7中默認是200。
minSpareThreads Tomcat初始化時創建的 socket 線程數 ,表示定義最低數量的進程處於運行中,即表示在tomcat啟動後,預先生成這樣數量的線程等待用戶的接入,有點類似httpd中的prefork模式中預先生成一些進程來等待接受請求。
maxSpareThreads Tomcat連接器的最大空閑 socket 線程數 ,表示如果空閑的進程多於這個值,那就把多余的線程中止來釋放資源。
enableLookups 若設為true, 則支持域名解析,可把 ip 地址解析為主機名, 一般都應該設置為false。


redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口
acceptAccount ,默認值100:監聽端口隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads ) ,tomcat的的處理能力達到maxThreads設定的值後,接下來的連接放入acceptCount設定的隊列中,tomcat7中默認是100。
connectionTimeout 通常3000毫秒:連接超時
minProcessors ,默認值10:服務器創建時的最小處理線程數
maxProcessors ,默認值75:服務器同時最大處理線程數
URIEncoding URL統一編碼

[Tomcat緩存優化]

compression 打開壓縮功能 ,是否啟用壓縮功能,on為啟用,off為禁用,默認是off。啟用壓縮功能能節約帶寬,但會占用更多的cpu資源,這個視實際情況而定到底是否啟用壓縮功能,在實際環境中壓縮的功能一般放在前端的httpd或nginx上來處理。

compressionMinSize 啟用壓縮的輸出內容大小,這裏面默認為2KB
compressableMimeType 壓縮類型
connectionTimeout 定義建立客戶連接超時的時間. 如果為 -1, 表示不限制建立客戶連接的時間

參考網絡對服務器做過如下配置,拿出來分享下:

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="25"
  maxSpareThreads="75"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="200"
  redirectPort="8443"
  disableUploadTimeout="true" />

後來發現在訪問量達到3 百萬多的時候出現性能瓶頸,更改後的配置

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>

  

優化tomcat配置(從內存、並發、緩存4個方面)優化