tomcat優化


Tomcat 運行環境介紹
1.Tomcat 本身無法直接在計算機上運行,需要依賴硬件基礎上的操作系統和Java虛擬機;
2.Java 程序啟動時JVM都會分配一個初始內存和最大內存給這個應用;
3.當應用程序用到最大內存的時刻,就會觸發JVM做垃圾回收(GC)動作,釋放被占用的內存;
4.因此想要調整Java程序啟動時的初始內存和最大內存,需要向JVM申請;
5.如果初始內存大小設置過小,且此時初始化的應用對象過多,虛擬機就必須重復的加載內存來滿足使用;
6.基於以上原因,最好把初始內存大小(Xms)和最大內存(Xmx)設置成一樣;
7.JVM上所有的對象都在"""堆區(heap)"""上分配內存(也有在"棧"上分配內存的)
8.堆區的大小是可以動態擴展的,但"""堆"""的大小受限於系統使用的物理內存,當應用程序需要的內存超出"堆"的最大值時,JVM虛擬機就會拋出內存溢出異常,並且導致應用程序奔潰;
9.基於以上原因,建議“堆”的大小設置成物理內存的80%

1、內存優化

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’

  配置完成后可重啟Tomcat ,通過以下命令進行查看配置是否生效: 
  看到Tomcat 進程號是 15242 。 
  查看是否配置生效:
  sudo jmap – heap 15242
  我們可以看到MaxHeapSize 等參數已經生效。

2、並發優化

調整連接器connector的並發處理能力;在Tomcat 配置文件 server.xml 中的

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  minProcessors="100"
  maxProcessors="1000"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
View Code

參數說明:

   maxThreads 客戶請求最大線程數 
  minSpareThreads Tomcat初始化時創建的 socket 線程數 
  maxSpareThreads Tomcat連接器的最大空閑 socket 線程數 
  enableLookups 若設為true, 則支持域名解析,可把 ip 地址解析為主機名 
  redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口 
  acceptAccount 監聽端口隊列最大數,滿了之后客戶請求會被拒絕(不能小於maxSpareThreads ) 
  connectionTimeout 連接超時 
  minProcessors 服務器創建時的最小處理線程數 
  maxProcessors 服務器同時最大處理線程數 
  URIEncoding URL統一編碼

3、緩存壓縮優化

打開tomcat的壓縮功能;tomcat的壓縮優化就是將返回的html頁面等內容經過壓縮,壓縮成gzip格式之后,發送給瀏覽器,瀏覽器在本地解壓縮的過程。

<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"/>
View Code

其中:

 ●compression="on"   打開壓縮功能 
     ●compressionMinSize="2048"啟用壓縮的輸出內容大小,默認為2KB 
     ●noCompressionUserAgents="gozilla,traviata" 對於以下的瀏覽器,不啟用壓縮 
 ●compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮

緩存策略:

開啟瀏覽器的緩存,這樣讀取存放在webapps文件夾里的靜態內容會更快,大大推動整體性能。

    ①瀏覽器第一次請求tomcat服務器某資源

    ②tomcat查詢到該資源,並將該資源最后修改的時間保存在響應頭的Last-Modified中 (Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT) 

    ③瀏覽器第二次訪問tomcat請求該資源,並將之前該資源的最后修改時間放入If-Modified-Since請求頭中

    ④服務器收到該請求,比較該請求中的If-Modified-Since與資源最后修改時間Last-Modified是否一致,如果一致則不向其發送該資源並向其發送響應代碼304告訴其去本地取緩存。

4、安全優化

#降權啟動

以普通用戶啟動tomcat,降權啟動,防止不法分子通過tomcat獲得root權限。

#修改端口號

修改tomcat配置文件server.xml中的全球人都知道的http連接器端口號,防止黑客攻擊。

#更改關閉Tomcat的指令

   這個端口是有安全隱患的,直接Telnet遠程連接主機,輸入shutdown即可關閉tomcat。

shown端口是寫在Server參數里的,直接去掉是不管用,也是會默認啟動的,一般在安全設置時候建議把端口修改為其他端口,shutdown修改為其他復雜字串。實際上這個端口是可以直接屏蔽不監聽的。設置時候將其port值修改為-1即可:
<Server port="-1" shutdown="SHUTDOWN">

#修改管理員用戶名,密碼

修改tomcat-user.xml中默認的Manager用戶名和密碼

  <?xml version=’1.0’ encoding=’utf-8’?>
                   <tomcat-users>
                       <role rolename=”manager”/>
                            <user username=”temobi” password=”temobi8090” roles=”manager”/>
                  </tomcat-users>

#清空站點目錄下ROOT下管理頁面等文件

 ROOT下有一些站點的管理程序可以查看tomcat的各種信息及配置,因此我們需要清空這些文件或者將站點目錄更改。

 生產環境一般不適用Tomcat默認的管理界面,這些頁面存放在Tomcat 的webapps安裝目錄下,
          把該目錄下的所有文件刪除即可:rm -rf  /usr/local/tomcat8/webapps/*

5、數據庫性能調優

      Tomcat性能在等待數據庫查詢被執行期間會降低。如今大多數應用程序都是使用可能包含“命名查詢”的關系型數據庫。如果是那樣的話,Tomcat會在啟動時默認加載命名查詢,這個可能會提升性能。

另一件重要事是確保所有數據庫連接正確地關閉。給數據庫連接池設置正確值也是十分重要的。我所說的值是指Resource要素的最大空閑數(maxIdle),最大連接數(maxActive),最大建立連接等待時間(maxWait)屬性的值。

因為配置依賴與應用要求,我也不能在本文指定正確的值。你可以通過調用數據庫性能測試來找到正確的值。  

6、其他優化

#錯誤頁面優雅顯示

#隱藏版本號

#禁用DNS查詢

      當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務器查找機器名轉換為IP地址。DNS查詢需要占用網絡,並且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。

為了消除DNS查詢對性能的影響我們可以關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值改為false:enableLookups="false"

#設置session過期時間

Tomcat采用數據庫連接池技術,當用戶在一定時間不對數據庫有操作時間后,就自動關閉這個連接,這是為了更好的利用資源,防止浪費寶貴的數據庫連接資源。

以下是設置session時間的3個方法:
  1. 在tomcat——>conf——>servler.xml文件中定義:
  <Context path="/test" docBase="/test"
  defaultSessionTimeOut="3600" isWARExpanded="true"
  isWARValidated="false" isInvokerEnabled="true"
  isWorkDirPersistent="false"/> 
  defaultSessionTimeOut="3600"
  2. 項目所在目錄下的 web.xml中定義:
  <session-config>
  <session-timeout>20</session-timeout>
  </session-config>
  3. 在程序中定義:
  session.setMaxInactiveInterval(30*60);
  設置單位為秒,設置為-1永不過期

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM