當前位置:首頁 » 硬碟大全 » tomcat啟動緩存可用空間不足
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

tomcat啟動緩存可用空間不足

發布時間: 2023-08-28 16:54:31

A. 怎樣調節tomcat緩存大小

Tomcat有很多方面,我從內存、並發、緩存四個方面介紹優化方法。
一.Tomcat內存優化

Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 JAVA_OPTS 參數。
JAVA_OPTS參數說明
-server 啟用jdk 的 server 版;
-Xms java虛擬機初始化時的最小內存;
-Xmx java虛擬機可使用的最大內存;
-XX:PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域
伺服器參數配置

現公司伺服器內存一般都可以加到最大2G ,所以可以採取以下配置:

JAVA_OPTS='-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

配置完成後可重啟Tomcat ,通過以下命令進行查看配置是否生效:
首先查看Tomcat 進程號:

sudo lsof -i:9027

我們可以看到Tomcat 進程號是 12222 。
查看是否配置生效:

sudo jmap – heap 12222

我們可以看到MaxHeapSize 等參數已經生效。、
二.Tomcat並發優化

1.Tomcat連接相關參數

在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中

1>參數說明

minProcessors:最小空閑連接線程數,用於提高系統處理性能,默認值為 10
maxProcessors:最大連接線程數,即:並發處理的最大請求數,默認值為 75
acceptCount:允許的最大連接數,應大於等於 maxProcessors ,默認值為 100
enableLookups:是否反查域名,取值為: true 或 false 。為了提高處理能力,應設置為 false
connectionTimeout:網路連接超時,單位:毫秒。設置為 0 表示永不超時,這樣設置有隱患的。通常可設置為30000 毫秒。
其中和最大連接數相關的參數為maxProcessors 和 acceptCount 。如果要加大並發連接數,應同時加大這兩個參數。
web server允許的最大連接數還受制於操作系統的內核參數設置,通常 Windows 是 2000 個左右, Linux 是 1000 個左右。

2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
minProcessors="100"
maxProcessors="1000"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

2.調整連接器connector的並發處理能力

1>參數說明

maxThreads 客戶請求最大線程數
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"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

3.Tomcat緩存優化

1>參數說明

c ompression 打開壓縮功能
compressionMinSize 啟用壓縮的輸出內容大小,這裡面默認為2KB
compressableMimeType 壓縮類型
connectionTimeout 定義建立客戶連接超時的時間. 如果為 -1, 表示不限制建立客戶連接的時間

2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

4.參考配置

1>舊有的配置

參考網路對伺服器做過如下配置,拿出來分享下:

<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="200"
redirectPort="8443"
disableUploadTimeout="true" />

後來發現在訪問量達到3 百萬多的時候出現性能瓶頸。
2>更改後的配置

<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

B. Tomcat伺服器如何清理緩存

  • 打開tomcat服務安裝目錄,可以看到所有的相關文件目錄

C. Tomcat伺服器如何清理緩存

Tomcat伺服器如何清理緩存

Tomcat因為其開源,免費,運行時佔用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統常用的功能而深受程序員的喜愛,那麼如何清理tomcat伺服器緩存呢?
Tomcat是Apache軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟體開發商的認可,成為目前比較流行的Web 應用伺服器。目前最新版本是7.0。
清理伺服器緩存可以消除某些未知的錯誤,如果你運行以前編譯的項目有錯,而沒有及時將伺服器緩存清理掉,錯誤依舊可能發生在新的項目中:所以,清理緩存是很有必要的:

步驟/方法
1
首先打開Myeclipse8.5,這里我使用的是Myeclipse8.5,所以以8.5版本來做說明:如果你使用的是Eclipse或者Myeclipse,依舊可以使用此方法:

2
第一種方法:打開一個項目,這里我打開的Mail項目,然後點擊Myeclipse菜單欄中的project-選擇clean:如下圖所示:
點擊這里可以不用進入tomcat伺服器直接清理緩存

3
上面的方式雖然簡便,不過使用起來,還是不能夠徹底的清理tomcat緩存。

4
第二種方法:
進入tomcat的安裝目錄進行清理緩存,這里我使用的tomcat6.0,使用的tomcat是免安裝的,解壓縮後直接使用,建議大家也用這個版本,而非安裝版本,如果你使用的是安裝版,方法與解壓版完全一樣。

5
然後點擊進入解壓後的tomcat,找到work文件夾,。此文件下有個catalina目錄(tomcat小名叫catalina),work目錄下的文件都可以刪除。
work目錄下有一個catalina目錄。

6
刪除work中的tomcat目錄後,緩存已經刪除。
7
如果我們先前發布的一個項目有錯,大家都知道,tomcat發布的項目在webapps下,如果以前的項目有錯那麼運行新的項目肯定還是會有錯的。以前的項目遺留的錯誤,這時,只要將以前的項目刪除掉就行了。

8
進入webapps將以前遺留的項目刪除就行了,也可以將所有的項目清空,因為Myeclipse的工作空間中還有以前的項目,我們只需要重新發布,tomcat的webapps目錄中就會將工作空間中的項目自動重新載入到webapps中。是不是很方便呢?

參考資料:網路經驗
參考鏈接:http://jingyan..com/article/b24f6c82e76af886bfe5dad3.html
———————————————分割線——————————————————
滿意請採納(⊙o⊙),以上是軟硬謙施團隊為你帶來的回答。
如果有什麼不懂的可以追問,以後有什麼問題可以向我提問或者向我的團隊提問。(*^__^*) 嘻嘻……

D. 1 如何優化Tomcat

(1)bin:主要用來存放命令,.bat是windows下,.sh是Linux下
(2)conf:主要用來存放tomcat的一些配置文件
(3)lib:存放tomcat依賴的一些jar包
(4)logs:存放tomcat在運行時產生的日誌文件
(5)temp:存放運行時產生的臨時文件
(6)webapps:存放應用程序
(7)work:存放tomcat運行時編譯後的文件,比如JSP編譯後的文件

tomcat優化可以有幾個方向:配置項的刪除,配置參數的修改,jdk參數修改、Tomcat內存優化、Tomcat並發優化、Tomcat緩存優化

web項目中自帶的WEB-INF/web.xml,
tomcat自帶的conf/web.xml以及conf/server.xml文件。
因為這些xml文件都會被tomcat解析,所以優化方向是將這三類文件中不必要的配置刪除。

tomcat在啟動時,會將web項目中WEB-INF/web.xml和自己的conf/web.xml進行合並,然後在ContextConfig類下的configureContext()統一解析這些內容:

這個只能是在項目中不需要的配置不要放進去,有過期的配置要及時刪除,減少tomcat的解析成本。

這是一個處理靜態文件的servlet,如果項目中不需要tomcat進行靜態文件的處理,可以將其刪掉。

這個servlet是用來編譯和執行jsp文件的,如果項目中沒有jsp文件,可以將其刪掉。

項目中沒有jsp,關於jsp下面的映射也可以刪除:

文件中提供的mime類型非常多,如果有確定項目中不會涉及到的類型,可以刪除其映射配置。

如果不需要展示tomcat的歡迎頁,可以將其刪掉。

下面是tomcat8.5版本提供的默認listener列表:

作用是在Tomcat初始化時,列印一下Tomcat相關的版本信息以及操作系統和jdk環境信息,可以刪掉。

Tomcat啟動時,檢查APR庫,如果存在則載入,這個配置僅當connector的protocol設置為AJP/1.3時有用,如果非AJP/1.3,可以刪除。

Java運行環境可能導致某些已知位置的內存泄漏或文件鎖定,
提供這些情況的解決方案。

作用於全局資源,通過該監聽器,初始化標簽中定義的全局JNDI資源;
如果沒有該監聽器,定義的全局資源都不能使用。
如果不使用GlobalNamingResources定義全局資源,可以刪除。

Web應用因thread-local導致的內存泄露而要停止時,該監聽器會觸發線程池中線程的更新。
只有當Web應用(即Context元素)的屬性設置為true時,該監聽器才有效。
官方文檔對配置的解釋為:

GlobalNamingResources可以定義全局資源,可以看出,這個tomcat的默認配置是通過讀取$TOMCAT_HOME/ conf/tomcat-users.xml實現的。
tomcat-user.xml用於定義tomcat管理頁面相關配置,如果不登錄管理界面可以刪掉。

官網中對於這個connector有如下描述:
The AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol. This is used for cases where you wish to invisibly integrate Tomcat into an existing (or new) Apache installation, and you want Apache to handle the static content contained in the web application, and/or utilize Apache's SSL processing.
可知當tomcat需要集成到Apache伺服器時才使用這個connector,現在一般都用Nginx代替Apache,所以不使用Apache的話這個也可以刪掉。

tomcat默認配置包含如下connector:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Realm,可以把它理解成「域」;
Realm提供了一種用戶密碼與web應用的映射關系,從而達到角色安全管理的作用,tomcat默認的這個realm是和name為UserDatabase的資源綁定的,而該資源在Server元素中使用GlobalNamingResources配置。如果不需要可以刪掉。

Valve的意思是「閥門」,不同的Valve有不同的特性,Valve的配置中AccessLogValve的作用是記錄其所在容器處理的所有請求,默認配置中的Valve放在Host下,便可以記錄該Host處理的所有請求。
AccessLogValve記錄的日誌就是訪問日誌,每天的請求會寫到一個日誌文件里。現在一般記錄Nginx訪問日誌,這個也可以刪除。

tomcat是用Java寫的,就要運行在jvm上,垃圾處理方式等都要遵循jvm的方式。
tomcat中設置jvm參數在 catalina.sh(Linux)和catalina.bat(windows)中,以JAVA_OPTS變數存儲。以catalina.sh為例:

可以在該變數中添加jvm參數,達到減少gc次數等目標,例如根據tomcat所在伺服器修改jvm內存大小等。

參數優化主要是優化sever.xml中的配置參數,示例server.xml如下:

port:指定一個埠,這個埠負責監聽關閉tomcat的請求。
shutdown:指定向埠發送的命令字元串。
sever配置沒什麼可優化的。

name:指定service的名字。
service配置沒什麼可優化的。

port:指定伺服器端要創建的埠號,並在這個埠監聽來自客戶端的請求
minProcessors:伺服器啟動時創建的處理請求的線程數
maxProcessors:最大可以創建的處理請求的線程數
enableLookups:如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
redirectPort:指定伺服器正在處理http請求時收到了一個SSL傳輸請求後重定向的埠號
acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
maxConnections:達到這個值之後,將繼續接受連接,但是不處理,能繼續接受多少根據acceptCount的值
minSpareThreads:最小空閑線程數
connectionTimeout:指定超時的時間數(以毫秒為單位)
官網8.5版本connector使用連接類型如下:

查看Connector源碼:

可知默認協議使用的是Http11NioProtocol,即NIO方式。
tomcat默認連接池有限制,可以為connector配置自己的連接池,例如:

在連接池中可以根據項目自定義最大線程數量。

name:屬性用於日誌和錯誤信息,在整個Server中應該唯一
defaultHost:defaultHost屬性指定了默認的host名稱,當發往本機的請求指定的host名稱不存在時,一律使用defaultHost指定的host進行處理;因此defaultHost的值,必須與Engine中的一個Host組件的name屬性值匹配
沒什麼可優化的。

name:指定虛擬主機的主機名,一個Engine中有且僅有一個Host組件的name屬性與Engine組件的defaultHost屬性相匹配;
註:一般情況下,主機名需要是在DNS伺服器中注冊的網路名,但是Engine指定的defaultHost不需要

appBase:應用程序基本目錄,即存放應用程序的目錄

unpackWARs:指定了是否將war文件解壓,如果為true,則通過解壓後的目錄運行該Web應用;如果為false,則直接使用WAR文件運行Web應用

autoDeploy:是否自動部署,Tomcat運行期間會用一個線程定時檢查,如果有新的web工程會自動部署。
autoDeploy生產環境之下可以改成false,減少tomcat的負擔。
autoDeploy有需要注意的點,如果為true,拷貝war到webapp下面,tomcat自動解壓並部署。但是停掉tomcat拷貝新的war包過去,tomcat不會解壓新包並後覆蓋舊目錄,因為tomcat直接使用了之前解壓過的目錄。官網有描述:
If you redeploy an updated WAR file, be sure to delete the expanded directory when restarting Tomcat, so that the updated WAR file will be re-expanded (note that the auto deployer, if enabled, will automatically expand the updated WAR file once the previously expanded directory is removed).

docBase:代表應用程序或war文件存放的路徑,這個可以自由指定,例如d:/study

path:

表示此web應用程序的url的前綴,這樣請求的url為 http://localhost:8080/path/ **

reloadable:如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,可以在不重起tomcat的情況下改變應用程序

生產環境中可以把reloadable設置為false。

className:指定Realm使用的類名,此類必須實現org.apache.catalina.Realm介面
沒什麼可優化的

className:規定了Valve的類型;例如tomcat默認的是AccessLogValve。
directory:指定日誌存儲的位置,默認日誌存儲在 TOMCAT_HOME/logs目錄下,可以看到如下所示的日誌文件。
沒什麼可優化的。

Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數。

現公司伺服器內存一般都可以加到最大2G ,所以可以採取以下配置:
JAVA_OPTS=』-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m』

配置完成後可重啟Tomcat ,通過以下命令進行查看配置是否生效:
首先查看Tomcat 進程號:sudo lsof -i:9027

我們可以看到Tomcat 進程號是 12222 。
查看是否配置生效:sudo jmap – heap 12222
我們可以看到MaxHeapSize 等參數已經生效。

在Tomcat 配置文件 server.xml 中的
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
minProcessors="100"
maxProcessors="1000"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

maxThreads 客戶請求最大線程數
minSpareThreads Tomcat初始化時創建的 socket 線程數
maxSpareThreads Tomcat連接器的最大空閑 socket 線程數
enableLookups 若設為true, 則支持域名解析,可把 ip 地址解析為主機名
redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 埠
acceptAccount 監聽埠隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads )
connectionTimeout 連接超時
minProcessors 伺服器創建時的最小處理線程數
maxProcessors 伺服器同時最大處理線程數
URIEncoding URL統一編碼

compression 打開壓縮功能
compressionMinSize 啟用壓縮的輸出內容大小,這裡面默認為2KB
compressableMimeType 壓縮類型
connectionTimeout 定義建立客戶連接超時的時間. 如果為 -1, 表示不限制建立客戶連接的時間