溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

發(fā)布時(shí)間:2020-07-22 17:46:48 來源:網(wǎng)絡(luò) 閱讀:537 作者:架構(gòu)師追風(fēng) 欄目:編程語言

一、前言

最近整理了 Tomcat 調(diào)優(yōu)這塊,基本上面試必問,于是就花了點(diǎn)時(shí)間去搜集一下 Tomcat 調(diào)優(yōu)都調(diào)了些什么,先記錄一下調(diào)優(yōu)手段,更多詳細(xì)的原理和實(shí)現(xiàn)以后用到時(shí)候再來補(bǔ)充記錄,下面就來介紹一下,Tomcat 調(diào)優(yōu)大致分為兩大類。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

1、Tomcat的自身調(diào)優(yōu)

采用動(dòng)靜分離節(jié)約 Tomcat 的性能

調(diào)整 Tomcat 的線程池

調(diào)整 Tomcat 的連接器

修改 Tomcat 的運(yùn)行模式

禁用 AJP 連接器

2、JVM的調(diào)優(yōu)

調(diào)優(yōu)Jvm內(nèi)存


二、Tomcat 自身調(diào)優(yōu)

1、采用動(dòng)靜分離

靜態(tài)資源如果讓 Tomcat 處理的話 Tomcat 的性能會(huì)被損耗很多,所以我們一般都是采用:Nginx+Tomcat 實(shí)現(xiàn)動(dòng)靜分離,讓 Tomcat 只負(fù)責(zé) jsp 文件的解析工作,Nginx 實(shí)現(xiàn)靜態(tài)資源的訪問。

2、調(diào)優(yōu) Tomcat 線程池

打開tomcat的serve.xml,配置Executor,相關(guān)參數(shù)說明如下。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

name:給執(zhí)行器(線程池)起一個(gè)名字;

namePrefix:指定線程池中的每一個(gè)線程的 name 前綴;

maxThreads:線程池中最大的線程數(shù)量,假設(shè)請求的數(shù)量超過了 750,這將不是意味著將 maxThreads 屬性值設(shè)置為 750,它的最好解決方案是使用「Tomcat集群」。也就是說,如果有 1000 請求,兩個(gè) Tomcat 實(shí)例設(shè)置 maxThreads = 500,而不在單 Tomcat 實(shí)例的情況下設(shè)置 maxThreads=1000。

minSpareThreads:線程池中允許空閑的線程數(shù)量(多余的線程都?xì)⑺溃?/p>

maxIdLeTime:一個(gè)線程空閑多久算是一個(gè)空閑線程;

其他的配置其實(shí)閱讀官方文檔是最好的「見參考鏈接」。

3、調(diào)優(yōu) Tomcat 的連接器 Connector

打開 Tomcat 的 serve.xml,配置 Connector,參數(shù)說明如下。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

executor:指定這個(gè)連接器所使用的執(zhí)行器(線程池);

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

enableLookups=false:關(guān)閉 DNS 解析,減少性能損耗;

minProcessors服務(wù)器啟動(dòng)時(shí)創(chuàng)建的最少線程數(shù);

maxProcessors:最大可以創(chuàng)建的線程數(shù);

acceptCount=1000:線程池中的線程都被占用,允許放到隊(duì)列中的請求數(shù);

maxThreads=3000:最大線程數(shù);

minSpareThreads=20:最小空閑線程數(shù),這里是一直會(huì)運(yùn)行的線程;

與壓縮有關(guān)系的配置:如果已經(jīng)對代碼進(jìn)行了動(dòng)靜分離,靜態(tài)頁面和圖片等數(shù)據(jù)就不需要 Tomcat 處理了,那么也就不需要配置在 Tomcat 中配置壓縮了;

一個(gè)完整的配置如下。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

4、通過修改 Tomcat 的運(yùn)行模式

BIO

Tomcat8 以下版本,默認(rèn)使用的就是 BIO「阻塞式IO)」模式。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

對于每一個(gè)請求都要?jiǎng)?chuàng)建一個(gè)線程來進(jìn)行處理,不適合高并發(fā)。

NIO

Tomcat8 以上版本,默認(rèn)使用的就是NIO模式「非阻塞式 IO」。

APR

全稱 Apache Portable Runtime,是Tomcat生產(chǎn)環(huán)境運(yùn)行的首選方式,如果操作系統(tǒng)未安裝 APR 或者 APR 路徑未指到 Tomcat 默認(rèn)可識(shí)別的路徑,則 APR 模式無法啟動(dòng),自動(dòng)切換啟動(dòng) NIO 模式。所以必須要安裝 APR 和 Native,直接啟動(dòng)就支持 APR,APR是從操作系統(tǒng)級(jí)別解決異步 IO 問題,APR 的本質(zhì)就是使用 JNI 技術(shù)調(diào)用操作系統(tǒng)底層的 IO 接口,所以需要提前安裝所需要的依賴

提升 Tomcat 對靜態(tài)文件的處理性能,當(dāng)然也可以采用動(dòng)靜分離。

5、禁用 AJP 連接器

AJP的全稱 Apache JServer Protocol,使用 Nginx+Tomca t的架構(gòu),所以用不著 AJP 協(xié)議,所以把AJP連接器禁用。

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

三、JVM 調(diào)優(yōu)

Tomcat 是運(yùn)行在 JVM 上的,所以對 JVM 的調(diào)優(yōu)也是非常有必要的。
歡迎大家關(guān)注我的公種浩【程序員追風(fēng)】,文章都會(huì)在里面更新,整理的資料也會(huì)放在里面。

找到 catalina.sh;

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

添加;

一線大廠Java面試必問的2大類Tomcat調(diào)優(yōu)

參數(shù)設(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"

調(diào)整堆大小的的目的是最小化垃圾收集的時(shí)間,以在特定的時(shí)間內(nèi)最大化處理客戶的請求。

最后

歡迎大家一起交流,喜歡文章記得點(diǎn)個(gè)贊喲,感謝支持!


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI