溫馨提示×

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

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

淺談Tomcat服務(wù)器優(yōu)化方法

發(fā)布時(shí)間:2020-04-08 00:46:27 來源:網(wǎng)絡(luò) 閱讀:314 作者:沙漏半杯 欄目:編程語言

對(duì)于JavaWeb開發(fā)人員而言,Tomcat已成為默認(rèn)的web服務(wù)器,但是在生產(chǎn)環(huán)境下使用Tomcat部署應(yīng)用,我們?nèi)绻捎肨omcat默認(rèn)的配置,尤其是內(nèi)存和線程的配置,其配置都很低,容易成為性能瓶頸,所以我們需要對(duì)Tomcat服務(wù)器進(jìn)行優(yōu)化,提升其運(yùn)行性能,下面我們一起來看看Tomcat如何優(yōu)化?


一、Tomcat內(nèi)存優(yōu)化,啟動(dòng)時(shí)告訴JVM需要多大內(nèi)存(調(diào)優(yōu)內(nèi)存是最直接的方式)

Windows 下的 catalina.bat

Linux 下的 catalina.sh

在該文件中配置jvm的內(nèi)存空間,如: JAVA_OPTS='-Xms256m -Xmx512m'

-Xms<size> JVM初始化堆的大小

-Xmx<size> JVM堆的最大值,實(shí)際參數(shù)大小根據(jù)服務(wù)器配置或者項(xiàng)目具體設(shè)置;


二、Tomcat 線程優(yōu)化 在server.xml中配置

比如:

connectionTimeout="20000" ?/>

maxThreads="X" 表示最多同時(shí)處理X個(gè)連接

minSpareThreads="X" 初始化X個(gè)連接

maxSpareThreads="X" 表示如果最多可以有X個(gè)線程,一旦超過X個(gè),則會(huì)關(guān)閉不在需要的線程

acceptCount="X" 當(dāng)同時(shí)連接的人數(shù)達(dá)到maxThreads時(shí),還可以排隊(duì),隊(duì)列大小為X.超過X就不處理


三、Tomcat IO 優(yōu)化

1:同步阻塞IO(JAVA BIO) 同步并阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程(one connection one thread 想想都覺得恐怖,線程可是非常寶貴的資源),當(dāng)然可以通過線程池機(jī)制改善.

2:JAVA NIO 又分為同步非阻塞IO,異步阻塞IO與BIO最大的區(qū)別one request one thread.可以復(fù)用同一個(gè)線程處理多個(gè)connection(多路復(fù)用).

3:異步非阻塞IO(Java NIO2又叫AIO) 主要與NIO的區(qū)別主要是操作系統(tǒng)的底層區(qū)別,可以做個(gè)比喻:比作快遞,NIO就是網(wǎng)購后要自己到官網(wǎng)查下快遞是否已經(jīng)到了(可能是多次),然后自己去取快遞;AIO就是快遞員送貨上門了(不用關(guān)注快遞進(jìn)度)。

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇,但程序直觀簡(jiǎn)單易理解.

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜,JDK1.4開始支持.

AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)(重操作)的架構(gòu),比如相冊(cè)服務(wù)器,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜,JDK7開始支持.

在server.xml中

connectionTimeout="20000"

URIEncoding="UTF-8"

useBodyEncodingForURI="true"

enableLookups="false"

redirectPort="8443" />

實(shí)現(xiàn)對(duì)Tomcat的IO切換。


四、大殺器APR

APR是從操作系統(tǒng)級(jí)別來解決異步的IO問題,大幅度的提高性能. (http://apr.apache.org/)。

APR(Apache Portable Runtime)是一個(gè)高可移植庫,它是Apache HTTP Server 2.x 的核心,能更好地和其它本地web技術(shù)集成,總體上讓Java更有效率作為一個(gè)高性能web服務(wù)器平臺(tái)而不是簡(jiǎn)單作為后臺(tái)容器;

在產(chǎn)品環(huán)境中,特別是直接使用Tomcat做WEB服務(wù)器的時(shí)候,應(yīng)該使用Tomcat Native來提高其性能,如果不配APR,基本上300個(gè)線程狠快就會(huì)用滿,以后的請(qǐng)求就只好等待.但是配上APR之后,并發(fā)的線程數(shù)量明顯下降,從原來的300可能會(huì)馬上下降到只有幾十,新的請(qǐng)求會(huì)毫無阻塞的進(jìn)來;

在局域網(wǎng)環(huán)境測(cè),就算是400個(gè)并發(fā),也是一瞬間就處理/傳輸完畢,但是在真實(shí)的Internet環(huán)境下,頁面處理時(shí)間只占0.1%都不到,絕大部分時(shí)間都用來頁面?zhèn)鬏?,如果不用APR,一個(gè)線程同一時(shí)間只能處理一個(gè)用戶,勢(shì)必會(huì)造成阻塞,所以生產(chǎn)環(huán)境下用apr是非常必要的.

安裝Apache Tomcat Native Library,直接啟動(dòng)就支持apr(http://tomcat.apache.org/native-doc/)它本身是基于APR的,排除代碼問題Tomcat優(yōu)化到這個(gè)層次,可以應(yīng)對(duì)大部分性能需求;

最后,優(yōu)化的前提條件是良好的代碼質(zhì)量和設(shè)計(jì)。


寫在最后:

?

碼字不易看到最后了,那就點(diǎn)個(gè)關(guān)注唄,只收藏不點(diǎn)關(guān)注的都是在耍流氓!

關(guān)注并私信我“架構(gòu)”,免費(fèi)送一些Java架構(gòu)資料,先到先得!

?


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

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

AI