更新時(shí)間:2022-12-19 15:45:59 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1955次
作為一個(gè)Java開發(fā)程序員,Tomcat服務(wù)器一定是很了解的,畢竟是大多數(shù)企業(yè)常用到的,但是,在一些并發(fā)量比較大的情況下,Tomcat會(huì)出現(xiàn)卡死或者自動(dòng)關(guān)閉的情況,那么如何優(yōu)化,才能讓它更加告訴運(yùn)行就成了在面試時(shí)會(huì)被問到的問題,讓我們來看看如何確保Tomcat能夠更好的運(yùn)行吧。

1、Tomcat的缺省端口是多少,怎么修改?
1)找到Tomcat目錄下的conf文件夾
2)進(jìn)入conf文件夾里面找到server.xml文件
3)打開server.xml文件
4)在server.xml文件里面找到下列信息
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" uriEncoding="utf-8"/>
port="8080"改成你想要的端口
2、tomcat 有哪幾種Connector 運(yùn)行模式(優(yōu)化)?
bio:傳統(tǒng)的Java 工/0操作,同步且阻塞IO。maxThreads="150”//Tomcat使用線程來處理接收的每個(gè)請(qǐng)求。這個(gè)值示Tomcat可創(chuàng)建的最大的線程數(shù)。默認(rèn)值200??梢愿鶕?jù)機(jī)器的時(shí)期性能和內(nèi)存大小調(diào)整,一般可以在400-500。最大可以在800左右。minspareThreads="25"---Tomcat初始化時(shí)創(chuàng)建的線程數(shù)。默認(rèn)值4。如果當(dāng)前沒有空閑線程,且沒有超過maxThreads,一次性創(chuàng)建的空閑線程數(shù)量。Tomcat初始化時(shí)創(chuàng)建的線程數(shù)量也由此值設(shè)置。maxSpareThreads="75"--一旦創(chuàng)建的線程超過這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線程。默認(rèn)值50。一旦創(chuàng)建的線程超過此數(shù)值,Tomcat會(huì)關(guān)閉不再需要的線程。線程數(shù)可以大致上用“同時(shí)在線人數(shù)”每秒用戶操作次數(shù)”系統(tǒng)平均操作時(shí)間” 來計(jì)算。acceptcount="100"----指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的語求數(shù),超過這個(gè)數(shù)的請(qǐng)求將不予處理。默認(rèn)值10。如果當(dāng)前可用線程數(shù)為0,則將請(qǐng)求放入處理隊(duì)列中。這個(gè)值限定了請(qǐng)求隊(duì)列的大小,超過這個(gè)數(shù)值的請(qǐng)求將不予處理。connectionTimeout="20000” --網(wǎng)絡(luò)連接超時(shí),默認(rèn)值20000,單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通??稍O(shè)置為30000毫秒。
nio: JDK1.4開始支持,同步阻塞或同步非阻塞IO。
指定使用NIO模型來接受HT TP請(qǐng)求
protocol="org.apache.coyote.http11.Httpl1NioProtoco]”指定使用NIO模型來接受HTTP請(qǐng)求。默認(rèn)是BlockingIo,配置為protoco1="HTTP/1.1"acceptorThreadCount="2”” 使用NIO模型時(shí)接收線程的數(shù)目
aio(nio.2): JDK7開始支持,異步非阻塞IO。
apr: Tomcat將以]NI的形式調(diào)用Apache HTTP服務(wù)器的核心動(dòng)態(tài)接來處理文件選取或網(wǎng)絡(luò)傳輸操作從而大大地 提高Tomcat對(duì)靜態(tài)文件的處理性能。
C1-1
<Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1"redirectport"8443” uriencoding="utf-8"/>
-Iv
<!-- protocol 啟用 nio模式,(tomcat8默認(rèn)使用的是nio)(apr模式利用系統(tǒng)級(jí)異步io) -->
<!-- minProcessors最小空閑連接線程數(shù)-->
<!-- maxProcessors最大連接線科數(shù)-->
<!-- acceptCount允許的最大連接數(shù),應(yīng)大于等于maxProcessors-->
<l-- enableLookups 如果為true,requst.getRemoteHost會(huì)執(zhí)行DNS查找,反向解析ip對(duì)應(yīng)域名或主機(jī)名-->
Connector port="8080protocol="org.apache.coyote.httpl1.Httpl1NioProtocolconnectionTimeout="20000redirectPort="8443maxThreads=“500"minSpareThreads=“100"
maxspareThreads="200"
acceptCount="200"
enablelookups"fase"
其他配置
maxHttpHeadersize="8192”http請(qǐng)求頭信息的最大程度,超過此長(zhǎng)度的部分不予處理。一般8K。URIEncoding="UTF-8”” 指定Tomcat容器的URL編碼格式。disableUploadtimeout="true" 上傳時(shí)是否使用超時(shí)機(jī)制enableLookups="false"--是否反查域名,默認(rèn)值為true。為了提高處理能力,應(yīng)設(shè)置為falsecompression="on"”打開樂縮功能
compressionMinsize="10240” 啟用壓縮的輸出內(nèi)容大小,默認(rèn)為2KBnoCompressionuserAgents="gozilla,traviata" 對(duì)于以下的瀏覽器,不啟用樂縮compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"些資源類型需要壓縮
3、Tomcat有幾種部署方式?
1)直接把Web項(xiàng)目放在webapps下,Tomcat會(huì)自動(dòng)將其部署
2)在server.xml文件上配置節(jié)點(diǎn),設(shè)置相關(guān)的屬性即可
3)通過Catalina來進(jìn)行配置:進(jìn)入到conf\Catalina\localhost文件下,創(chuàng)建一個(gè)xml文件,該文件的名字就是站點(diǎn)的名字。
編寫XML的方式來進(jìn)行設(shè)置。
4、tomcat容器是如何創(chuàng)建servlet類實(shí)例?用到了什么原理?
當(dāng)容器啟動(dòng)時(shí),會(huì)讀取在webapps目錄下所有的web應(yīng)用中的web.xml文件,然后對(duì)xml文件進(jìn)行解析,并讀取servlet注冊(cè)信息。然后,將每個(gè)應(yīng)用中注冊(cè)的servlet類都進(jìn)行加載,并通過反射的方式實(shí)例化。(有時(shí)候也是在第一次請(qǐng)求時(shí)實(shí)例化)在servlet注冊(cè)時(shí)加上如果為正數(shù),則在一開始就實(shí)例化,如果不寫或?yàn)樨?fù)數(shù),則第一次請(qǐng)求實(shí)例化。
5、內(nèi)存調(diào)優(yōu)
內(nèi)存方式的設(shè)置是在catalina.sh中,調(diào)整一下JAVA OPTS變量即可,因?yàn)楹竺娴膯?dòng)參數(shù)會(huì)把JAVA OPTS作為JVM的啟動(dòng)參數(shù)來處理。具體設(shè)置如下:
JAVA OPTS="SJAVA OPTS -Xmx3550m -Xms3550m -Xss128k -X:NewRatio=4 -Xx:SurvivorRatio=4"其各項(xiàng)參數(shù)如下:
-Xmx3550m: 設(shè)置JVM最大可用內(nèi)存為3550M。
-Xms3550m: 設(shè)置JM促使內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xmn2g: 設(shè)置年輕代大小為2G。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。
-Xss128k:設(shè)置每個(gè)線程的堆棧大小。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗(yàn)值在3000~5000左右。-xX:NewRatio=4:設(shè)置年輕代 (包括Eden和兩個(gè)survivor區(qū)) 與年老代的比值(除去持久代)。設(shè)置為4,則年輕代與年老代所占比值為1: 4,年輕代占整個(gè)堆棧的1/5-xX:SurvivorRatio=4: 設(shè)置年輕代中Eden區(qū)與survivor區(qū)的大小比值。設(shè)置為4,則兩個(gè)survivor區(qū)與一個(gè)Eden區(qū)的比值為2:4,一個(gè)survivor區(qū)占整個(gè)年輕代的1/6XX:MaxPermsize=16m:設(shè)置持久代大小為16m。-XX:MaxTenuringthreshold=0: 設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
以上就是“程序員保過的Tomcat優(yōu)化面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)