一.目錄結構
以Tomcat7爲例進行說明:
1.bin:該目錄下存放的是二進制可執行文件,如果是安裝版,那麼這個目錄下會有兩個exe文件:tomcat7.exe、tomcat7w.exe,前者是在控制檯下啓動Tomcat,後者是彈出UGI窗口啓動Tomcat;如果是解壓版,那麼會有startup.bat和shutdown.bat文件,startup.bat用來啓動Tomcat,但需要先配置JAVA_HOME環境變量才能啓動,shutdawn.bat用來停止Tomcat;
2、conf:這是一個非常非常重要的目錄,這個目錄下有四個最爲重要的文件:
-
- server.xml:配置整個服務器信息。例如修改端口號,添加虛擬主機等;
- tomcatusers.xml:存儲tomcat用戶的文件,這裏保存的是tomcat的用戶名及密碼,以及用戶的角色信息。可以按着該文件中的註釋信息添加tomcat用戶,然後就可以在Tomcat主頁中進入Tomcat Manager頁面了;
- web.xml:部署描述符文件,這個文件中註冊了很多MIME類型,即文檔類型。這些MIME類型是客戶端與服務器之間說明文檔類型的,如用戶請求一個html網頁,那麼服務器還會告訴客戶端瀏覽器響應的文檔是text/html類型的,這就是一個MIME類型。客戶端瀏覽器通過這個MIME類型就知道如何處理它了。當然是在瀏覽器中顯示這個html文件了。但如果服務器響應的是一個exe文件,那麼瀏覽器就不可能顯示它,而是應該彈出下載窗口才對。MIME就是用來說明文檔的內容是什麼類型的!
- context.xml:對所有應用的統一配置,通常我們不會去配置它
3、lib:Tomcat的類庫,裏面是一大堆jar文件。如果需要添加Tomcat依賴的jar文件,可以把它放到這個目錄中,當然也可以把應用依賴的jar文件放到這個目錄中,這個目錄中的jar所有項目都可以共享之,但這樣你的應用放到其他Tomcat下時就不能再共享這個目錄下的Jar包了,所以建議只把Tomcat需要的Jar包放到這個目錄下;
4、logs:這個目錄中都是日誌文件,記錄了Tomcat啓動和關閉的信息,如果啓動Tomcat時有錯誤,那麼異常也 會記錄在日誌文件中。
5、temp:存放Tomcat的臨時文件,這個目錄下的東西可以在停止Tomcat後刪除!
6、webapps:存放web項目的目錄,其中每個文件夾都是一個項目;如果這個目錄下已經存在了目錄,那麼都是tomcat自帶的。項目。其中ROOT是一個特殊的項目,在地址欄中沒有給出項目目錄時,對應的就是ROOT項目。http://localhost:8080/examples,進入示例項目。其中examples就是項目名,即文件夾的名字。
7、work:運行時生成的文件,最終運行的文件都在這裏。通過webapps中的項目生成的!可以把這個目錄下的內容刪除,再次運行時會生再次生成work目錄。當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然後再編譯Java文件生成class文件,生成的java和class文件都會存放到這個目錄下。
8、LICENSE:許可證。
9、NOTICE:說明文件。
二、熱部署
如果是使用eclipse的話進行配置Tomcat的時候選擇
也可以直接修改在eclipse裏面項目下面的一個server.xml文件,將 reloadable="true"即可
<Context docBase="C:\Program Files\Java\apache-tomcat-7.0.67\wtpwebapps\jimp" path="/jimp" reloadable="true" source="org.eclipse.jst.jee.server:jimp"/>
如果是idea的話選擇
三、支持的協議
同時支持http和https協議,AJP和自身帶的JMX
四、Tomcat性能優化
在項目完成後進行性能測試的時候,通過模擬一定數量的併發用戶訪問系統,發現速度較慢,除了提高代碼質量,加緩存,把靜態資源放到nginx上之外還進行了Tomcat的性能優化
在Tomcat下面conf有一個server.xml文件,我的裏面的默認配置是,運行模式爲bio的:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
(1)修改運行模式
Tomcat connector有三種運行模式,分別是bio,nio,apr。bio blocking I/O,阻塞式I/O操作,是默認的模式,性能最差,沒有經過任何優化處理和支持;nio 非阻塞式,擁有比傳統I/O操作更好的併發運行性能;Apr Apache Portable Runtime安裝起來最困難,但是從操作系統級別來解決異步的IO問題,可以大幅度的提高性能(詳細瞭解三種模式)。因此決定採用nio的模式,修改protocol
protocol="org.apache.coyote.http11.Http11NioProtocol"
(2)修改線程參數
在tomcat配置文件server.xml中的<Connector />配置中,和連接數相關的參數有:
maxThreads="150" 表示最多同時處理150個連接,Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。默認值200。
minSpareThreads="25" 表示即使沒有人使用也開這麼多空線程等待,這裏是25代表開25個線程,如果有人連接也不會臨時再重新進行線程的一系列操作比較耗時,能夠提高性能。
maxSpareThreads="75" 表示如果最多可以空75個線程,例如某時刻有80人訪問,之後沒有人訪問了,則tomcat不會保留80個空線程,而是關閉5個空的。 (一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認值50。
)
acceptCount="100" 當同時連接的人數達到maxThreads時,還可以接收排隊的連接數量,超過這個連接的則直接返回拒絕連接。(指定當任何能夠使用的處理請求的線程數都被使用時,能夠放到處理隊列中的請求數,超過這個數的請求將不予處理。默認值100。 )
其中和最大連接數相關的參數爲maxThreads和acceptCount。如果要加大併發連接數,應同時加大這兩個參數。
web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。因此對Tomcat的配置修改爲:
maxThreads="800" acceptCount="800" minSpareThreads="100"
(3)JVM調優
JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m"
(4)關閉DNS反向查詢
當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務器查找機器名轉換爲IP地址。DNS查詢需要佔用網絡,並且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。爲了消除DNS查詢對性能的影響我們可以關閉DNS查詢,所以在connector port="8080"中加入enableLookups=“false”(5)啓用Gzip壓縮
compressionMinSize: 2048 對小於該配置大小的文件不進行壓縮(單位:B,即默認2K。該屬性自Tomcat7有效 。)
noCompressionUserAgents: 指定不需要壓縮的瀏覽器Agent,使用逗號間隔
compressableMimeType: “text/html,text/xml,text/plain”(這是默認值,指定需要壓縮的請求文檔類型)
compression="on"
compressionMinSize1="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>