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