Tomcat剖析
Tomcat的目錄結構
1. bin目錄 該目錄下存放的tomcat 的可執行文件,如啓動關閉tomcat等。
2. Conf 這是tomcat的一個核心目錄
Server.xml 配置整個服務器信息 例如修改端口,添加虛擬機,做集羣操作,修改編碼等.
Tomcatuser.xml 這裏保存的是用戶的信息,配置之後可以在 tomcat manager中查看tomcat的運行狀態等。
Web.xml 部署描述符文件, 就是客戶端請求的是一個html頁面,tomact進行比對然後返回一個html頁面。
Context.xml 對所有的應用統一配置
3、lib:Tomcat的類庫
4.logs 裏面存放的是一些日誌文件,記錄tommcat啓動,關閉和異常狀態的信息
5.temp 存放的是Tomcat的臨時文件 可以在停止tomcat後刪除
6.webapps:存放web項目的目錄,其中每個文件夾都是一個項目;如果這個目錄下已經存在了目錄,那麼都是tomcat自帶的。項目。其中ROOT是一個特殊的項目,在地址欄中沒有給出項目目錄時,對應的就是ROOT項目。http://localhost:8080/examples,進入示例項目。其中examples就是項目名,即文件夾的名字。在啓動toncat的時候,如果你的項目在webapps中放着,那麼會啓動所有的項目。(注意)
7.work`: 運行時生成的文件,tomcat啓動生成的文件都在這裏面
Tomcat的請求迴應原理
Tomcat體系結構
由上圖可看出Tomca的心臟是兩個組件:Connecter和Container。一個Container可以選擇多個Connecter,多個Connector和一個Container就形成了一個Service。Service可以對外提供服務,而Server服務器控制整個Tomcat的生命週期。
組件的生命週期是由 lifecycle接口來進行管理的(生命週期的)組件只要實現這個接口並且進行對應的重寫就可以實現被擁有它的組件控制了,(上層控制)最上層的組件爲server 控制server的是startup 等命令來進行server的關閉和啓動
Connector組件(連機器組件)
Container組件(容器組件)
上圖就是container的體系結構,並且Engine和contriner是平級關係
解析server.xml配置
部分標籤屬性補充
<Service>元素
它包含一個<Engine>元素,以及一個或多個
<Connector>,這些Connector元素共享用同一個Engine元素
<Engine>元素
defaultHost指定處理客戶的默認主機名,在<Engine>中的<Host>子元素中必須定義這一主機
在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>
<host元素>
5>alias指定主機別名,可以指定多個別名
6>deployOnStartup如果此項設爲true,表示Tomcat服務器啓動時會自動發佈appBase目錄下所有的Web應用
.如果Web應用中的server.xml沒有相應的<Context>元素,將採用Tomcat默認的Context
在<Host>元素中可以包含如下子元素
<Logger>, <Realm>, <Value>, <Context>
<Context>元素
cookies指定是否通過Cookies來支持Session,默認值爲true
<Connector>元素 重要
2>enableLookups如果設爲true,表示支持域名解析,可以把IP地址解析爲主機名.WEB應用中調用
request.getRemoteHost方法返回客戶機主機名.默認值爲true
3>redirectPort指定轉發端口.如果當前端口只支持non-SSL請求,在需要安全通信的場命,將把客戶請求轉
發至SSL的redirectPort端口
HttpConnector元素的屬性
3>address如果服務器有二個以上ip地址,此屬性可以設定端口監聽的ip地址.默認情況下,端口會監聽服務
器上所有的ip地址
4>bufferSize設定由端口創建的輸入流的緩存大小.默認值爲2048byte
5>protocol設定Http協議,默認值爲HTTP/1.1
6>maxThreads設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數
目.默認值爲200
JkConnector的屬性//集羣使用
2>port設定AJP端口號
3>protocol必須設定爲AJP/1.3
Tomcat優化處理
1.內存優化
出現這種異常的時候我們就考慮tomcat的優化了
Tomcat內存優化主要是對 tomcat 啓動參數優化,我們可以在 tomcat 的啓動腳本 catalina.bat 中設置 java_OPTS 參數。
JAVA_OPTS參數說明
-server 啓用jdk 的 server 版;
-Xms java虛擬機初始化時的最小內存;
-Xmx java虛擬機可使用的最大內存;
-XX: PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域
服務器參數配置
下面的代碼需要放在Execute The Requested Command 下面第一行
Set JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
配置成功後可在https://jingyan.baidu.com/article/9f63fb916800e0c8410f0e6f.html 查看內存是否調整
2.Tomcat併發優化
可以在connector中配置相關屬性達到優化
maxThreads 客戶請求最大線程數 1000爲單個tomcat的峯值
minSpareThreads Tomcat初始化時創建的 socket 線程數
maxSpareThreads Tomcat連接器的最大空閒 socket 線程數
enableLookups 若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名
redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口
acceptAccount 監聽端口隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads )
connectionTimeout 連接超時
minProcessors 服務器創建時的最小處理線程數
maxProcessors 服務器同時最大處理線程數
URIEncoding URL統一編碼
2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1" //以http協議
maxHttpHeaderSize="8192"
maxThreads="1000" //最大線程數一個線程一爲一個人
minSpareThreads="100"//初始化時創建連接數
maxSpareThreads="1000"
minProcessors="100"//最小線程處理數
maxProcessors="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptaCount="1000"//監聽端口隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads )
redirectPort="8443"
disableUploadTimeout="true"/>//是否自己更新tomcat
超時時間也要自己設置 connectionTimeout="20000"
compression="on" //打開壓縮功能 屬於 緩存優化
compressionMinSize="2048" //可壓縮的最小值單位kb
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" //壓縮類型
Tomcat日誌處理
關於尋找異常處理是tomcat服務器中應用的一個很重要的部分
我們以前找錯都是在控制檯system.out 這太low了並且看的時候也是非常的麻煩。
其實我們項目中出現的異常的在tomcat目錄下的logs下都是有顯示的,這是tomcat的容器的日誌
而我們在控制檯中打印的信息是不會放在tomcat的容器日誌中的,這時候我們就要進行日誌跟蹤,要不然控制檯突然卡掉了宕機等,裏面的日誌信息就看不到了,這時候我們就要把控制檯裏面的日誌信息,也保存在tomca的logs目錄下
方法如下
打開startup.bat文件,找到call "%EXECUTABLE%" start %CMD_LINE_ARGS%, 改爲call "%EXECUTABLE%" run %CMD_LINE_ARGS% 。
打開catalina.bat文件,在4處 %ACTION% 後面加上 >> %CATALINA_HOME%\logs\catalina.%date:~0,4%-%date:~5,2%-%date:~8,2%.out 。重啓tomcat,tomcat的logs文件夾下就會出現catalina.out文件了。
這個時候我們就可以把控制檯中的日誌信息進行跟蹤同步在logs目錄下了