Tomcat虛擬主機和優化

3.java.lang.StackOverflowError——棧溢出

JVM 傲然是采用棧式的虛擬機,這個和 C 與 Pascal 都是同樣的。函數的調用過程都體如今堆棧和退棧上了。調用建構函數的『層』太多了,致使於把棧區溢出了。通常來講,一 般棧區遠遠小於堆區的,因為函數調用過程往往不會多於上千層,而即便每個函數調用需要 1K 的空間(這個大約相當於在一個 C 函數內聲明了 256 個 int 類型的變量),那麼棧區也然而是需要 1MB 的空間。通常棧的體積是 1-2MB 的。
通常遞歸也不要遞歸的層級過多,很容易溢出。 解決辦法:修改手續。

解決辦法:手動設置 MaxPermSize 體積。

PermGen space 的全稱是 Permanent Generation space,是指內存的永久保管地帶。為何會內存溢出,這是因為這塊內存主要是被 JVM 儲存 Class 和 Meta 信息的,Class 在被 Load 的時分被放入 PermGen space 地帶,它和儲存 Instance 的 Heap 地帶不一樣,sun 的GC 不會在主手續運行期對 PermGen space 施行打掃。所以,假如你的 APP 會載入眾多 CLASS 的話,就很可能出現 PermGen space 溢出。

2.java.lang.OutOfMemoryError: PermGen space——PermGen space 溢出

解決辦法:手動設置 JVM Heap(堆)的體積。

JVM 在啟動的時分會半自動設置 JVM Heap 的值,其初始空間(即-Xms)是物理內存的 1/64,最大空間(-Xmx)不可超過物理內存。可以利用 JVM 提供的 -Xmn -Xms -Xmx 等選項可施行設置。Heap 的體積是 Young Generation 和 Tenured Generaion 之和。在 JVM 中假如 98% 的時間是用於 GC,且可用的 Heap size 不足 2%的時分將拋出此異常信息。

<Connector port="8080" protocol="HTTP/11.1" connectionTimeout="20000"
redirectPort="8443" />

將默認配置做修改:
<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"/>

從新啟動 Tomcat 服務器,jmeter 仍然接續保持同等的參變量施行壓測,優化後壓測截圖
Tomcat虛擬主機和優化
常見不對申說
1.java.lang.OutOfMemoryError: Java heap space——JVM Heap(堆)溢出

  • maxThreads:Tomcat 使役線程來辦理收繳的每個煩請,這個值表達 Tomcat 可開創的最大的線程數,默認值是 200。
  • minSpareThreads:最小空閑線程數,Tomcat 啟動時的初始化的線程數,表達縱然沒有人使役也開如此多空線程等待,默認值是 10。
  • maxSpareThreads:最大備用線程數,一朝開創的線程超過這個值,Tomcat 便會關閉不再需要的 socket 線程。默認值是-1(無限止)。普通不必指定。
  • URIEncoding:指定 Tomcat 器皿的 URL 編碼款式,語言編碼款式這塊倒不如其他 Web 服務器軟件配置便捷,需要作別指定。
  • connnectionTimeout:網絡連署超時,單位:毫秒,設置為 0 表達永不超時,這麼設置有隱患的。通常默認 20000 毫秒就可以。
  • enableLookups:是否反查域名,以回返長程主機的主機名,取值為:true 或 false, 假如設置為 false,則直接回返 IP 地址,為了增長辦理能力,應設置為 false。
  • disableUploadTimeout:上傳時是否使役超時機制。應設置為 true。
  • connectionUploadTimeout:上傳超不時間,畢竟文件上傳可能需要耗費更多的時間, 這個依據你自個兒的業務需要自個兒調,以使 Servlet 有較長的時間來完成它的執行,需要與上一個參變量一起配合使役纔會生效。
  • acceptCount:指定當所有可以使役的辦理煩請的線程數都被使役時,可傳入連署煩請的最大隊列長度,超過這個數的煩請將不予辦理,默認為 100 個。
  • compression:是否對響應的數據施行 GZIP 壓縮,off:表達禁阻壓縮;on:表達准許壓縮(文本將被壓縮)、force:表達所有情況下都施行壓縮,默認值為 off,壓縮數據後可以管用的減損頁面的體積,普通可以減小 1/3 左右,節約帶寬。
  • compressionMinSize:表達壓縮響應的最小值,只有當響應報文體積大於這個值的時分纔會對報文施行壓縮,假如開啟了壓縮功能,默認值就是 2048。
  • compressableMimeType:壓縮類型,指定對哪些類型的文件施行數據壓縮。
    noCompressionUserAgents="gozilla, traviata":對於以下的瀏覽器,不啟用壓縮。

假如已經對代碼施行了響動離合,靜態頁面和圖片等數據就不必 Tomcat 辦理了,那麼也就不必在 Tomcat 中配置壓縮了。因為這搭只有一臺 Tomcat 服務器,而且壓測的是Tomcat 首頁,會有圖片和靜態資源文件,所以這搭啟用壓縮。
三、以上是一點常用的配置參變量,還有好多其他的參變量設置,還可以接續深化的優化,HTTP Connector 與 AJP Connector 的參變量屬性值,可以參考官方文檔的申述施行學習。鏈接 地 址 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html , 下 面 開 始 對Tomcat 配置文件優化施行前後的對比。
壓測腳本裡設置的是 20 秒啟動 4000 個線程數,並發為 2000,超不時間是 50000 毫秒。也可以愜當的依據自個兒的需要施行修改。為了不那麼復雜,從壓測結果看只關注聚合報告, 聚合報告只關注 Average、90百分之百 Line、Error百分之百這三列,因為壓測 Tomcat 首頁壓力不會太大, 所以 Error 都是為 0 歸屬正常。先看一組優化前(默認的配置)壓測截圖
Tomcat虛擬主機和優化
敞開 Tomcat 主配置文件 server.xml,找到默認配置:

//關於 www.test.com 的虛擬主機配置
<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>
//關於 bbs.test.com 的虛擬主機配置
<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.測試
客戶端綁定兩個域名需要寫入本機 hosts,Tomcat 默認端口是 8080。
192.168.9.236 www.test.com
192.168.9.236 bbs.test.com
Tomcat虛擬主機和優化
Tomcat虛擬主機和優化
三、Tomcat 優化
Tomcat 的缺省配置並不適應生產背景,它會頻繁出現假死現象需要重啟,只有經過不斷壓測優化能力讓它無上速率安定的運行。優化主要有三方面,分為操作系統優化(內核參變量優化),Tomcat 配置文件參變量優化,Java 虛擬機(JVM)調優。其中最難明白的就是 jvm調優。
1.Tomcat 配置文件參變量優化
關於 Tomcat 主配置文件 server.xml 裡面眾多默認的配置項,但並不得知足業務需要, 常用的優化相關參變量如次。

[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>下邊增加如次內容:

配置Tomcat虛擬主機和優化
案例需要
1)部署 Tomcat 服務。
2)配置虛擬主機。
3)Tomcat 優化。
4)常見不對剖析及辦理。
案例實行思路
1)安裝 Tomcat 需要的背景。
2)安裝 Tomcat 服務。
3)配置虛擬主機。
4)客戶端安裝壓測軟件施行壓測並調優。
5)常見不對申說。
實驗過程
1.下載並安裝 JDK,部署Tomcat服務
詳情可查看:https://blog.51cto.com/14557905/2464661
2.查看 Tomcat 安裝後目次結構
Tomcat虛擬主機和優化
1)bin
儲存啟動和關閉 Tomcat 的腳本文件, 比較常用的是 catalina.sh、startup.sh、shutdown.sh 三個文件。
2)conf
儲存 Tomcat 服務器的各種配置文件,比較常用的是 server.xml、context..xml、tomcat-users.xml、web.xml 四個文件。
3)lib
儲存 Tomcat 服務器的 jar 包,普通不作任何改動,錯非連署第三方服務,譬如 redis, 那就需要添加相對應的 jar 包。
4)logs
儲存 Tomcat 日記。
5)temp
儲存 Tomcat 運行時萌生的文件。
6)webapps
儲存項目資源的目次。
7)work
Tomcat 辦公目次,普通蕩除 Tomcat 緩存的時分會使役到。
二、虛擬主機配置
可能有時企業會有多個項目需要運行,那麼肯定不可能是一臺服務器上運行多個Tomcat 服務,這麼會耗費太多的系統資源。此時,就需要使役到 Tomcat 虛擬主機。例如如今新增兩個域名 www.test.com 和 bbs.test.com,期望經過這兩個域名過訪到不一樣的項目內容。
1.開創 www 和 bbs 項目目次和文件


發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *