轉載:www.cnblogs.com/wangsenhtml
最近,看到一篇講述 Tomcat 調優的文章,寫得挺不錯的,因爲以前寫了好幾篇關於 Tomcat 的文章,這篇分享給各位讀者,作一下補充。java
原文以下。面試
1、描述apache
最近,在補充本身的短板,恰好整理到 Tomcat 調優這塊,基本上面試必問,因而就花了點時間去搜集一下 Tomcat 調優都調了些什麼,先記錄一下調優手段,更多詳細的原理和實現之後用到時候再來補充記錄,下面就來介紹一下,Tomcat 調優大體分爲兩大類。tomcat
一、Tomcat的自身調優服務器
採用動靜分離節約 Tomcat 的性能架構
調整 Tomcat 的線程池併發
調整 Tomcat 的鏈接器less
修改 Tomcat 的運行模式異步
禁用 AJP 鏈接器
二、JVM的調優
調優Jvm內存
2、Tomcat 自身調優
一、採用動靜分離
靜態資源若是讓 Tomcat 處理的話 Tomcat 的性能會被損耗不少,因此咱們通常都是採用:Nginx+Tomcat 實現動靜分離,讓 Tomcat 只負責 jsp 文件的解析工做,Nginx 實現靜態資源的訪問。
二、調優 Tomcat 線程池
打開tomcat的serve.xml,配置Executor,相關參數說明以下。
name:給執行器(線程池)起一個名字;
namePrefix:指定線程池中的每個線程的 name 前綴;
maxThreads:線程池中最大的線程數量,假設請求的數量超過了 750,這將不是意味着將 maxThreads 屬性值設置爲 750,它的最好解決方案是使用「Tomcat集羣」。也就是說,若是有 1000 請求,兩個 Tomcat 實例設置 maxThreads = 500,而不在單 Tomcat 實例的狀況下設置 maxThreads=1000。
minSpareThreads:線程池中容許空閒的線程數量(多餘的線程都殺死);
maxIdLeTime:一個線程空閒多久算是一個空閒線程;
其餘的配置其實閱讀官方文檔是最好的「見參考連接」。
三、調優 Tomcat 的鏈接器 Connector
打開 Tomcat 的 serve.xml,配置 Connector,參數說明以下。
executor:指定這個鏈接器所使用的執行器(線程池);
enableLookups=false:關閉 DNS 解析,減小性能損耗;
minProcessors:服務器啓動時建立的最少線程數;
maxProcessors:最大能夠建立的線程數;
acceptCount=1000:線程池中的線程都被佔用,容許放到隊列中的請求數;
maxThreads=3000:最大線程數;
minSpareThreads=20:最小空閒線程數,這裏是一直會運行的線程;
與壓縮有關係的配置:若是已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不須要 Tomcat 處理了,那麼也就不須要配置在 Tomcat 中配置壓縮了;
一個完整的配置以下。
四、經過修改 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 對靜態文件的處理性能,固然也能夠採用動靜分離。
五、禁用 AJP 鏈接器
AJP的全稱 Apache JServer Protocol,使用 Nginx+Tomca t的架構,因此用不着 AJP 協議,因此把AJP鏈接器禁用。
3、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