Tomcat調優的技巧
阿新 • • 發佈:2018-11-22
目錄
一、描述
最近,在補充自己的短板,剛好整理到 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