1. 程式人生 > >Tomcat調優的技巧

Tomcat調優的技巧

目錄

一、描述

二、Tomcat 自身調優

三、JVM 調優


 

一、描述

最近,在補充自己的短板,剛好整理到 Tomcat 調優這塊,基本上面試必問,於是就花了點時間去搜集一下 Tomcat 調優都調了些什麼,先記錄一下調優手段,更多詳細的原理和實現以後用到時候再來補充記錄,下面就來介紹一下,Tomcat 調優大致分為兩大類。

1、Tomcat的自身調優

採用動靜分離節約 Tomcat 的效能

調整 Tomcat 的執行緒池

調整 Tomcat 的聯結器

修改 Tomcat 的執行模式

禁用 AJP 聯結器

2、JVM的調優

調優Jvm記憶體

二、Tomcat 自身調優

1、採用動靜分離

靜態資源如果讓 Tomcat 處理的話 Tomcat 的效能會被損耗很多,所以我們一般都是採用:Nginx+Tomcat 實現動靜分離,讓 Tomcat 只負責 jsp 檔案的解析工作,Nginx 實現靜態資源的訪問。

2、調優 Tomcat 執行緒池

開啟tomcat的serve.xml,配置Executor,相關引數說明如下。

name:給執行器(執行緒池)起一個名字;

namePrefix:指定執行緒池中的每一個執行緒的 name 字首;

maxThreads:
執行緒池中最大的執行緒數量,假設請求的數量超過了 750,這將不是意味著將 maxThreads 屬性值設定為 750,它的最好解決方案是使用「Tomcat叢集」。也就是說,如果有 1000 請求,兩個 Tomcat 例項設定 maxThreads = 500,而不在單 Tomcat 例項的情況下設定 maxThreads=1000。

minSpareThreads:執行緒池中允許空閒的執行緒數量(多餘的執行緒都殺死);

maxIdLeTime:一個執行緒空閒多久算是一個空閒執行緒;

 

3、調優 Tomcat 的聯結器 Connector

開啟 Tomcat 的 serve.xml,配置 Connector,引數說明如下。

executor:指定這個聯結器所使用的執行器(執行緒池);

enableLookups=false:關閉 DNS 解析,減少效能損耗;

minProcessors:伺服器啟動時建立的最少執行緒數;

maxProcessors:最大可以建立的執行緒數;

acceptCount=1000:執行緒池中的執行緒都被佔用,允許放到佇列中的請求數;

maxThreads=3000:最大執行緒數;

minSpareThreads=20:最小空閒執行緒數,這裡是一直會執行的執行緒;

與壓縮有關係的配置:如果已經對程式碼進行了動靜分離,靜態頁面和圖片等資料就不需要 Tomcat 處理了,那麼也就不需要配置在 Tomcat 中配置壓縮了;

一個完整的配置如下。

4、通過修改 Tomcat 的執行模式

BIO

Tomcat8 以下版本,預設使用的就是 BIO「阻塞式IO)」模式。

對於每一個請求都要建立一個執行緒來進行處理,不適合高併發。

NIO

Tomcat8 以上版本,預設使用的就是NIO模式「非阻塞式 IO」。

APR

全稱 Apache Portable Runtime,是Tomcat生產環境執行的首選方式,如果作業系統未安裝 APR 或者 APR 路徑未指到 Tomcat 預設可識別的路徑,則 APR 模式無法啟動,自動切換啟動 NIO 模式。所以必須要安裝 APR 和 Native,直接啟動就支援 APR,APR是從作業系統級別解決非同步 IO 問題,APR 的本質就是使用 JNI 技術呼叫作業系統底層的 IO 介面,所以需要提前安裝所需要的依賴

提升 Tomcat 對靜態檔案的處理效能,當然也可以採用動靜分離。

5、禁用 AJP 聯結器

AJP的全稱 Apache JServer Protocol,使用 Nginx+Tomca t的架構,所以用不著 AJP 協議,所以把AJP聯結器禁用。

三、JVM 調優

Tomcat 是執行在 JVM 上的,所以對 JVM 的調優也是非常有必要的。

找到 catalina.sh;

新增;

引數設定;

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求。

參考

https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html

https://tomcat.apache.org/tomcat-8.0-doc/config/index.html