溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

配置Tomcat虛擬主機(jī)和優(yōu)化Tomcat

發(fā)布時(shí)間:2020-06-10 13:02:20 來源:億速云 閱讀:353 作者:元一 欄目:云計(jì)算

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)
配置Tomcat虛擬主機(jī)和優(yōu)化Tomcat
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虛擬主機(jī)和優(yōu)化Tomcat
配置Tomcat虛擬主機(jī)和優(yōu)化Tomcat
三、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ù)如下。

  • maxThreads:Tomcat 使用線程來處理接收的每個(gè)請求,這個(gè)值表示 Tomcat 可創(chuàng)建的最大的線程數(shù),默認(rèn)值是 200。
  • minSpareThreads:最小空閑線程數(shù),Tomcat 啟動(dòng)時(shí)的初始化的線程數(shù),表示即使沒有人使用也開這么多空線程等待,默認(rèn)值是 10。
  • maxSpareThreads:最大備用線程數(shù),一旦創(chuàng)建的線程超過這個(gè)值,Tomcat 就會(huì)關(guān)閉不再需要的 socket 線程。默認(rèn)值是-1(無限制)。一般不需要指定。
  • URIEncoding:指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 Web 服務(wù)器軟件配置方便,需要分別指定。
  • connnectionTimeout:網(wǎng)絡(luò)連接超時(shí),單位:毫秒,設(shè)置為 0 表示永不超時(shí),這樣設(shè)置有隱患的。通常默認(rèn) 20000 毫秒就可以。
  • enableLookups:是否反查域名,以返回遠(yuǎn)程主機(jī)的主機(jī)名,取值為:true 或 false, 如果設(shè)置為 false,則直接返回 IP 地址,為了提高處理能力,應(yīng)設(shè)置為 false。
  • disableUploadTimeout:上傳時(shí)是否使用超時(shí)機(jī)制。應(yīng)設(shè)置為 true。
  • connectionUploadTimeout:上傳超時(shí)時(shí)間,畢竟文件上傳可能需要消耗更多的時(shí)間, 這個(gè)根據(jù)你自己的業(yè)務(wù)需要自己調(diào),以使 Servlet 有較長的時(shí)間來完成它的執(zhí)行,需要與上一個(gè)參數(shù)一起配合使用才會(huì)生效。
  • acceptCount:指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時(shí),可傳入連接請求的最大隊(duì)列長度,超過這個(gè)數(shù)的請求將不予處理,默認(rèn)為 100 個(gè)。
  • compression:是否對響應(yīng)的數(shù)據(jù)進(jìn)行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進(jìn)行壓縮,默認(rèn)值為 off,壓縮數(shù)據(jù)后可以有效的減少頁面的大小,一般可以減小 1/3 左右,節(jié)省帶寬。
  • compressionMinSize:表示壓縮響應(yīng)的最小值,只有當(dāng)響應(yīng)報(bào)文大小大于這個(gè)值的時(shí)候才會(huì)對報(bào)文進(jìn)行壓縮,如果開啟了壓縮功能,默認(rèn)值就是 2048。
  • compressableMimeType:壓縮類型,指定對哪些類型的文件進(jìn)行數(shù)據(jù)壓縮。
    noCompressionUserAgents="gozilla, traviata":對于以下的瀏覽器,不啟用壓縮。

如果已經(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虛擬主機(jī)和優(yōu)化Tomcat
打開 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)化后壓測截圖
配置Tomcat虛擬主機(jī)和優(yōu)化Tomcat
常見錯(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 的。
通常遞歸也不要遞歸的層次過多,很容易溢出。 解決方法:修改程序。

向AI問一下細(xì)節(jié)

免責(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)容。

AI