更新時間:2023-01-03 16:32:40 來源:動力節點 瀏覽1488次
已經是新的一年了,很多人都開始臨時抱佛腳的準備面試題,今天小編也準備了這幾道關于Tomcat的核心面試及答案,看完后肯定會在你的就業面試道路上幫助很大:
1、Tomcat的缺省端口是多少,怎么修改?
默認端口為8080,可以通過在tomcat安裝包conf目錄下,service.xml中的Connector元素的port屬性來修改端口。
2、tomcat 有哪幾種Connector 運行模式(優化)?
這三種模式的不同之處如下:
BIO:一個線程處理一個請求。缺點:并發量高時,線程數較多,浪費資源。Tomcat7版本或更低版本中,在Linux系統中默認使用這種方式。
NIO:利用Java的異步IO處理,可以通過少量的線程處理大量的請求。tomcat8.0.x中默認使用的是NIO。Tomcat7必須修改Connector配置來啟動:
APR:即Apache Portable Runtime,從操作系統層面解決io阻塞問題。Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式。
3、Tomcat有幾種部署方式?
4、tomcat容器是如何創建servlet類實例?用到了什么原理?
5、tomcat 如何優化?
tomcat作為Web服務器,它的處理性能直接關系到用戶體驗,下面是幾種常見的優化措施:
掉對web.xml的監視,把jsp提前編輯成Servlet。有富余物理內存的情況,加大tomcat使用的jvm的內存
服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響。
單個服務器性能總是有限的,最好的辦法自然是實現橫向擴展,那么組建tomcat集群是有效提升性能的手段。我們還是采用了Nginx來作為請求分流的服務器,后端多個tomcat共享session來協同工作??梢詤⒖贾皩懙摹独胣ginx+tomcat+memcached組建web服務器負載均衡》。
優化線程數優化
找到Connector port="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount屬性(使acceptCount大于等于maxThreads),如下:
其中:
maxThreads:tomcat可用于請求處理的最大線程數,默認是200 minSpareThreads:tomcat初始線程數,即最小空閑線程數 maxSpareThreads:tomcat最大空閑線程數,超過的會被關閉 acceptCount:當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理.默認100
使用線程池優化
在server.xml中增加executor節點,然后配置connector的executor屬性,如下:
其中:
namePrefix:線程池中線程的命名前綴 maxThreads:線程池的最大線程數 minSpareThreads:線程池的最小空閑線程數 maxIdleTime:超過最小空閑線程數時,多的線程會等待這個時間長度,然后關閉 threadPriority:線程優先級
注:當tomcat并發用戶量大的時候,單個jvm進程確實可能打開過多的文件句柄,這時會報java.net.SocketException:Too many open files錯誤??墒褂孟旅娌襟E檢查:
ps -ef |grep tomcat 查看tomcat的進程ID,記錄ID號,假設進程ID為10001 lsof -p 10001|wc -l 查看當前進程id為10001的 文件操作數 使用命令:ulimit -a 查看每個用戶允許打開的最大文件數
啟動速度優化
因為tomcat啟動起來后就是一個java進程,所以這塊可以參照JVM部分的優化思路。堆內存相關參數,比如說:
-Xms:虛擬機初始化時的最小堆內存。
-Xmx:虛擬機可使用的最大堆內存。-Xms與-Xmx設成一樣的值,避免JVM因為頻繁的GC導致性能大起大落
-XX:MaxNewSize:新生代占整個堆內存的最大值。
另外還有方法區參數調整(注意:JDK版本)、垃圾收集器等優化。JVM相關參數請看:手把手教你設置JVM調優參數
6、熟悉tomcat的哪些配置?
Context(表示一個web應用程序,通常為WAR文件,關于WAR的具體信息見servlet規范)標簽。
docBase:該web應用的文檔基準目錄(Document Base,也稱為Context Root),或者是WAR文件的路徑??梢允菇^對路徑,也可以使用相對于context所屬的Host的appBase路徑。
path:表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/path/****。
reloadable:這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,我們可以在不重啟tomcat的情況下改變應用程序。
useNaming:如果希望Catalina為該web應用使用一個JNDI InitialContext對象,設為true。該InitialialContext符合J2EE平臺的約定,缺省值為true。
workDir:Context提供的臨時目錄的路徑,用于servlet的臨時讀/寫。利用javax.servlet.context.tempdir屬性,servlet可以訪問該目錄。如果沒有指定,使用$CATALINA_HOME/work下一個合適的目錄。
swallowOutput:如果該值為true,System.out和System.err的輸出被重定向到web應用的logger。如果沒有指定,缺省值為false
debug:與這個Engine關聯的Logger記錄的調試信息的詳細程度。數字越大,輸出越詳細。如果沒有指定,缺省為0。
host(表示一個虛擬主機)標簽。
name:指定主機名。
appBase:應用程序基本目錄,即存放應用程序的目錄。
unpackWARs:如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序。
Logger(表示日志,調試和錯誤信息)標簽。
className:指定logger使用的類名,此類必須實現org.apache.catalina.Logger接口。
prefix:指定log文件的前綴。
suffix:指定log文件的后綴。
timestamp:如果為true,則log文件名中要加入時間,如下例:localhost_log.2001-10-04.txt。
以上就是“六道比較難回答的tomcat面試題及答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習