您好,登錄后才能下訂單哦!
Tomcatl介紹
Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開發(fā)而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn),Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規(guī)范。因?yàn)門omcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可,成為目前比較流行的Web 應(yīng)用服務(wù)器。
Tomcat組件及其特點(diǎn)
tomcat組件
servlet(應(yīng)用程序或者容器)是java提供的用于開發(fā)web服務(wù)器應(yīng)用程序的一個(gè)組件,運(yùn)行在服務(wù)器端,有servlet用于生成動(dòng)態(tài)頁面內(nèi)容,servlet是平臺(tái)立的java類,編寫一個(gè)servlet,實(shí)際上就是安裝servlet規(guī)范編寫一個(gè)java類
配置Tomcat虛擬主機(jī)和優(yōu)化
案例需求
1)部署 Tomcat 服務(wù)。
2)配置虛擬主機(jī)。
3)Tomcat 優(yōu)化。
4)常見錯(cuò)誤分析及處理。
案例實(shí)現(xiàn)思路
1)安裝 Tomcat 需要的環(huán)境。
2)安裝 Tomcat 服務(wù)。
3)配置虛擬主機(jī)。
4)客戶端安裝壓測軟件進(jìn)行壓測并調(diào)優(yōu)。
5)常見錯(cuò)誤說明。
實(shí)驗(yàn)過程
1.下載并安裝 JDK,部署Tomcat服務(wù)
詳情可查看:https://blog.51cto.com/14557905/2464661
2.查看 Tomcat 安裝后目錄結(jié)構(gòu)
1)bin
存放啟動(dòng)和關(guān)閉 Tomcat 的腳本文件, 比較常用的是 catalina.sh、startup.sh、shutdown.sh 三個(gè)文件。
2)conf
存放 Tomcat 服務(wù)器的各種配置文件,比較常用的是 server.xml、context..xml、tomcat-users.xml、web.xml 四個(gè)文件。
3)lib
存放 Tomcat 服務(wù)器的 jar 包,一般不作任何改動(dòng),除非連接第三方服務(wù),比如 redis, 那就需要添加相對應(yīng)的 jar 包。
4)logs
存放 Tomcat 日志。
5)temp
存放 Tomcat 運(yùn)行時(shí)產(chǎn)生的文件。
6)webapps
存放項(xiàng)目資源的目錄。
7)work
Tomcat 工作目錄,一般清除 Tomcat 緩存的時(shí)候會(huì)使用到。
二、虛擬主機(jī)配置
可能有時(shí)候公司會(huì)有多個(gè)項(xiàng)目需要運(yùn)行,那么肯定不可能是一臺(tái)服務(wù)器上運(yùn)行多個(gè)Tomcat 服務(wù),這樣會(huì)消耗太多的系統(tǒng)資源。此時(shí),就需要使用到 Tomcat 虛擬主機(jī)。例如現(xiàn)在新增兩個(gè)域名 www.test.com 和 bbs.test.com,希望通過這兩個(gè)域名訪問到不同的項(xiàng)目內(nèi)容。
1.創(chuàng)建 www 和 bbs 項(xiàng)目目錄和文件
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/www
[root@localhost ~]# echo "This is www page\!" > /usr/local/tomcat/webapps/www/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/bbs
[root@localhost ~]# echo "This is bbs page\!" > /usr/local/tomcat/webapps/bbs/index.jsp
2.修改 Tomcat 主配置文件
修改 Tomcat 主配置文件/usr/local/tomcat/conf/server.xml,在</Host>下面增加如下內(nèi)容:
//關(guān)于 www.test.com 的虛擬主機(jī)配置
<Hostname="www.test.com"appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/www"
path="" reloadable="true" />
</Host>
//關(guān)于 bbs.test.com 的虛擬主機(jī)配置
<Host name="bbs.test.com" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/bbs"
path="" reloadable="true" />
</Host>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
3.測試
客戶端綁定兩個(gè)域名需要寫入本機(jī) hosts,Tomcat 默認(rèn)端口是 8080。
192.168.9.236 www.test.com
192.168.9.236 bbs.test.com
三、Tomcat 優(yōu)化
Tomcat 的缺省配置并不適合生產(chǎn)環(huán)境,它會(huì)頻繁出現(xiàn)假死現(xiàn)象需要重啟,只有通過不斷壓測優(yōu)化才能讓它最高效率穩(wěn)定的運(yùn)行。優(yōu)化主要有三方面,分為操作系統(tǒng)優(yōu)化(內(nèi)核參數(shù)優(yōu)化),Tomcat 配置文件參數(shù)優(yōu)化,Java 虛擬機(jī)(JVM)調(diào)優(yōu)。其中最難理解的就是 jvm調(diào)優(yōu)。
1.Tomcat 配置文件參數(shù)優(yōu)化
關(guān)于 Tomcat 主配置文件 server.xml 里面很多默認(rèn)的配置項(xiàng),但并不能滿足業(yè)務(wù)需求, 常用的優(yōu)化相關(guān)參數(shù)如下。
如果已經(jīng)對代碼進(jìn)行了動(dòng)靜分離,靜態(tài)頁面和圖片等數(shù)據(jù)就不需要 Tomcat 處理了,那么也就不需要在 Tomcat 中配置壓縮了。因?yàn)檫@里只有一臺(tái) Tomcat 服務(wù)器,而且壓測的是Tomcat 首頁,會(huì)有圖片和靜態(tài)資源文件,所以這里啟用壓縮。
三、以上是一些常用的配置參數(shù),還有好多其它的參數(shù)設(shè)置,還可以繼續(xù)深入的優(yōu)化,HTTP Connector 與 AJP Connector 的參數(shù)屬性值,可以參考官方文檔的詳細(xì)說明進(jìn)行學(xué)習(xí)。鏈接 地 址 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html , 下 面 開 始 對Tomcat 配置文件優(yōu)化進(jìn)行前后的對比。
壓測腳本里設(shè)置的是 20 秒啟動(dòng) 4000 個(gè)線程數(shù),并發(fā)為 2000,超時(shí)時(shí)間是 50000 毫秒。也可以適當(dāng)?shù)母鶕?jù)自己的需求進(jìn)行修改。為了不那么復(fù)雜,從壓測結(jié)果看只關(guān)注聚合報(bào)告, 聚合報(bào)告只關(guān)注 Average、90% Line、Error%這三列,因?yàn)閴簻y Tomcat 首頁壓力不會(huì)太大, 所以 Error 都是為 0 屬于正常。先看一組優(yōu)化前(默認(rèn)的配置)壓測截圖
打開 Tomcat 主配置文件 server.xml,找到默認(rèn)配置:
<Connector port="8080" protocol="HTTP/11.1" connectionTimeout="20000"
redirectPort="8443" />
將默認(rèn)配置做修改:
<Connector port="8080" protocol="HTTP/11.1"
connectionTimeout="20000"
redirectPort="8443" minSpareThreads="50"
enableLookups="false" disableUploadTimeout="true" acceptCount="300" maxThreads="500" processorCache="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image
/jpg,image/png"/>
重新啟動(dòng) Tomcat 服務(wù)器,jmeter 還是繼續(xù)保持同樣的參數(shù)進(jìn)行壓測,優(yōu)化后壓測截圖
常見錯(cuò)誤說明
1.java.lang.OutOfMemoryError: Java heap space——JVM Heap(堆)溢出
JVM 在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置 JVM Heap 的值,其初始空間(即-Xms)是物理內(nèi)存的 1/64,最大空間(-Xmx)不可超過物理內(nèi)存??梢岳?JVM 提供的 -Xmn -Xms -Xmx 等選項(xiàng)可進(jìn)行設(shè)置。Heap 的大小是 Young Generation 和 Tenured Generaion 之和。在 JVM 中如果 98% 的時(shí)間是用于 GC,且可用的 Heap size 不足 2%的時(shí)候?qū)伋龃水惓P畔ⅰ?/p>
解決方法:手動(dòng)設(shè)置 JVM Heap(堆)的大小。
2.java.lang.OutOfMemoryError: PermGen space——PermGen space 溢出
PermGen space 的全稱是 Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。為什么會(huì)內(nèi)存溢出,這是由于這塊內(nèi)存主要是被 JVM 存放 Class 和 Meta 信息的,Class 在被 Load 的時(shí)候被放入 PermGen space 區(qū)域,它和存放 Instance 的 Heap 區(qū)域不同,sun 的GC 不會(huì)在主程序運(yùn)行期對 PermGen space 進(jìn)行清理。所以,如果你的 APP 會(huì)載入很多 CLASS 的話,就很可能出現(xiàn) PermGen space 溢出。
解決方法:手動(dòng)設(shè)置 MaxPermSize 大小。
3.java.lang.StackOverflowError——棧溢出
JVM 依然是采用棧式的虛擬機(jī),這個(gè)和 C 與 Pascal 都是一樣的。函數(shù)的調(diào)用過程都體現(xiàn)在堆棧和退棧上了。調(diào)用構(gòu)造函數(shù)的“層”太多了,以致于把棧區(qū)溢出了。通常來講,一 般棧區(qū)遠(yuǎn)遠(yuǎn)小于堆區(qū)的,因?yàn)楹瘮?shù)調(diào)用過程往往不會(huì)多于上千層,而即便每個(gè)函數(shù)調(diào)用需要 1K 的空間(這個(gè)大約相當(dāng)于在一個(gè) C 函數(shù)內(nèi)聲明了 256 個(gè) int 類型的變量),那么棧區(qū)也不過是需要 1MB 的空間。通常棧的大小是 1-2MB 的。
通常遞歸也不要遞歸的層次過多,很容易溢出。 解決方法:修改程序。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。