描述
最近在補充自己的短板,剛好整理到Tomcat調優這塊,基本上面試必問,於是就花了點時間去搜集一下tomcat調優
都調了些什么,先記錄一下調優手段,更多詳細的原理和實現以后用到時候再來補充記錄,下面就來介紹一下,
tomcat調優大致分為兩大類:
一、tomcat的自身調優
- 采用動靜分離節約tomcat的性能
- 調整tomcat的線程池
- 調整tomcat的連接器
- 修改tomcat的運行模式
- 禁用AJP連接器
二、jvm的調優
- 調優Jvm內存
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
一個線程空閑多久算是一個空閑線程
其他的配置其實閱讀官方文檔是最好的:
tomcat8的配置文檔
調優tomcat的連接器Connector
- 打開tomcat的serve.xml
- 配置Connector
參數解釋
-
executor
指定這個連接器所使用的執行器(線程池) - enableLookups="false"
關閉dns解析,減少性能損耗 - minProcessors
服務器啟動時創建的最少線程數 - maxProcessors
最大可以創建的線程數 - acceptCount="1000"
線程池中的線程都被占用,允許放到隊列中的請求數 - maxThreads="3000"
最大線程數 - minSpareThreads="20"
最小空閑線程數,這里是一直會運行的線程 - 和壓縮有關系的配置
如果已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不需要 Tomcat 處理了,
那么也就不需要配置在 Tomcat 中配置壓縮了 - 一個完整的配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ##超時時間,毫秒,這里是20秒 redirectPort="443" maxThreads="3000" ##最大線程數 minSpareThreads="20" ##最小空閑線程數,這里是一直會運行的線程 acceptCount="1000" ##接收的隊列數 enableLookups="false" ##關閉dns解析,減少性能損耗 server="None" URIEncoding="UTF-8" />
通過修改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(java native interface)
技術調用操作系統底層的IO接口,所以需要提前安裝所需要的依賴 - 提升Tomcat對靜態文件的處理性能,當然也可以采用動靜分離
禁用AJP連接器
Apache JServer Protocol
使用Nginx+tomcat的架構,所以用不着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"
調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求,
結尾
- 這里只是簡單記錄一下調優都有哪些途徑,更多的是找出思路,具體怎么調需要我們根據實際情況去驗證調整。
- 推薦書籍:HowTomcatWorks
轉載:www.cnblogs.com/wangsen