欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Tomcat 配置與優(yōu)化方案詳解

 更新時間:2019年06月28日 09:56:27   作者:-飛奔的小蝸牛-  
這篇文章主要介紹了Tomcat 配置與優(yōu)化方案詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Service.xml

Server.xml配置文件用于對整個容器進行相關的配置。

<Server>元素:

是整個配置文件的根元素。表示整個Catalina容器。

屬性:

  • className:實現(xiàn)了org.apache.catalina.Server接口的類名,標準實現(xiàn)類是org.apache.catalina.core.StandardServer類。
  • Port:Tomcat服務器監(jiān)聽用于關閉Tomcat服務器的命令(必須)
  • Shutdown:發(fā)送到端口上用于關閉Tomcat服務器的命令。

例:

<Serverport=”8005” shutdown=”SHUTDOWN”>

<Connector>元素:

連接器,負責接收客戶的請求,以及向客戶端回送響應的消息。

HTTP連接器:

屬性:

  • allowTrace:是否允許HTTP的TRACE方法,默認為false
  • emptySessionPath:如果設置為true,用戶的所有路徑都將設置為/,默認為false。
  • enableLookups:調(diào)用request、getRemoteHost()執(zhí)行DNS查詢,以返回遠程主機的主機名,如果設置為false,則直接返回IP地址。
  • maxPostSize:指定POST方式請求的最大量,沒有指定默認為2097152。
  • protocol:值必須為HTTP1.1,如果使用AJP處理器,該值必須為AJP/1.3
  • proxyName:如這個連接器正在一個代理配置中被使用,指定這個屬性,在request.getServerName()時返回
  • redirectPort:如連接器不支持SSL請求,如收到SSL請求,Catalina容器將會自動重定向指定的端口號,讓其進行處理。
  • scheme:設置協(xié)議的名字,在request.getScheme()時返回,SSL連接器設為”https”,默認為”http”
  • secure:在SSL連接器可將其設置為true,默認為false
  • URIEncoding:用于解碼URL的字符編碼,沒有指定默認值為ISO-8859-1
  • useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的編碼來取代URIEncoding,用于解碼URI查詢參數(shù),默認為false
  • xpoweredBy:為true時,Tomcat使用規(guī)范建議的報頭表明支持Servlet的規(guī)范版本,默認為false
  • acceptCount:當所有的可能處理的線程都正在使用時,在隊列中排隊請求的最大數(shù)目。當隊列已滿,任何接收到的請求都會被拒絕,默認值為10
  • bufferSize:設由連接器創(chuàng)建輸入流緩沖區(qū)的大小,以字節(jié)為單位。默認情況下,緩存區(qū)大的大小為2048字節(jié)
  • compressableMimeType:MIME的列表,默認以逗號分隔。默認值是text/html,text/xml,text/plain
  • compression:指定是否對響應的數(shù)據(jù)進行壓縮。off:表示禁止壓縮、on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off
  • connectionTimeout:設置連接的超時值,以毫秒為單位。默認值為60000=60秒
  • disableUploadTimeOut:允許Servlet容器,正在執(zhí)行使用一個較長的連接超時值,以使Servlet有較長的時間來完成它的執(zhí)行,默認值為false
  • maxHttpHeaderSize:HTTP請求和響應頭的最大量,以字節(jié)為單位,默認值為4096字節(jié)
  • maxKeepAliveRequest:服務器關閉之前,客戶端發(fā)送的流水線最大數(shù)目。默認值為100
  • maxSpareThreads:允許存在空閑線程的最大數(shù)目,默認值為50
  • minSpareThreads:設當連接器第一次啟協(xié)創(chuàng)建線程的數(shù)目,確保至少有這么多的空閑線程可用。默認值為4
  • port:服務端套接字監(jiān)聽的TCP端口號,默認值為8080(必須)
  • socketBuffer:設Socket輸出緩沖區(qū)的大小(以字節(jié)為單位),-1表示禁止緩沖,默認值為9000字節(jié)
  • toNoDelay:為true時,可以提高性能。默認值為true
  • threadPriority:設JVM中請求處理線程優(yōu)先級。默認值為NORMAL-PRIORITY

例:

<Connector 
port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

AJP連接器:

用于將Apache與Tomcat集成在一起,當Apache接收到動態(tài)內(nèi)容請求時,通過在配置中指定的端口號將請求發(fā)送給在此端口號上監(jiān)聽的AJP連接器組件。

屬性:

  • backlog:當所有可能的請求處理線程都在使用時,隊列中排隊的請求最大數(shù)目。默認為10,當隊列已滿,任何請求都將被拒絕
  • maxSpareThread:允許存在空閑線程的最大數(shù)目,默認值為50
  • maxThread:最大線程數(shù),默認值為200
  • minSpareThreads:設當連接器第一次啟動時創(chuàng)建線程的數(shù)目,確保至少有這么多的空閑線程可用,默認值為4
  • port:服務端套接字的TCP端口號,默認值為8089(必須)
  • topNoDelay:為true時,可以提高性能,默認值為true
  • soTimeout:超時值

例:

<!—Define an AJP1.3 Connector on port 8089-->
<Connector port=”8089” enableLookups=”false” redirectPort=”8443” protocol=”AJP/1.3” />

<Engine>元素:

為特定的Service處理所有的請示。每個Service只能包含一個Engine元素,它負責接收和處理此Service所有的連接器收到的請求,向連接發(fā)回響應,并最終顯示在客戶端。<Engine>至少有一個<Host>元素,必須至少有一個<Host>屬性的名字與defaultHost指定的名字相匹配。

屬性:

  • className:實現(xiàn)org.apache.catalina.Engine接口,默認實現(xiàn)類為org.apache.catalina.core.StandardEngine類
  • defaultHost:默認主機名,值必須與<Service>的name值相匹配
  • name:指定Engine的邏輯名字(必須)
  • jvmRoute:在負載勻衡中使用的標識符,必須唯一

例:

<Engine name=”Cataline” defaultHost=”localhst”>

<Host>元素:

表示一個虛擬主機,為特定的虛擬主機處理所有請求

屬性:

  • appBase:設定應用程序的基目錄,絕對路徑或相對于%CATALINA_HOME%的路徑名
  • autoDeploy:指示Tomcat運行時,如有新的WEB程序加開appBase指定的目錄下,是否為自動布署,默認值為true
  • className:實現(xiàn)了org.apache.catalina.Host接口的類,標準實現(xiàn)類為org.apache.catalina.core.StandardHost類
  • deployOnStartup:Tomcat啟動時,是否自動部署appBase屬性指定目錄下所有的WEB應用程序,默認值為true
  • name:虛擬主機的網(wǎng)絡名(必須)

標準Host實現(xiàn)類org.apahce.catalina.core.StandardHost支持的附加屬性:

  • deployXML:為false將不會解析WEB應用程序內(nèi)部的context.xml,默認值為true
  • unPackWARs:虛擬主機指定臨時讀寫使用的目錄的路徑名,不設,Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄。

例:

<Host name=”localhst” appBase=”webapps” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>

配置虛擬主機:

<Hostname=”xxx” appBase=”c:/test”>
<Contentpath=”” docBase=”e:/abe”/>
</Hostname>

<context>元素:

一個WEB應用程序,處理當前WEB應用程序的所有請求,每一個<Context>必須使用唯一的上下文路徑。

屬性:

  • className:實現(xiàn)了org.apache.catalina.Context接口的類,標準實現(xiàn)類org.apache.catalina.core.StandardContext類
  • cookies:是否將Cookie應用于Session,默認值為true
  • crossContext:是否允許跨域訪問,為true時,在程序內(nèi)調(diào)用ServletContext.getContext()方法將返回一個虛擬主機上其它web程序的請求調(diào)度器。默認值為false,調(diào) 徑用getContext()返回為null
  • docBase:絕對路徑或相對于Host的appBase 屬性的相對路徑
  • privileged:為true,允許Web應用程序使用容器的Servlet
  • path:指定上下文路徑。一個虛擬主機中,上下文路徑必須唯一
  • reloadable:為true,Tomcat運行時,如果WEB-INF/classes和WEB-INF/lib目錄中有改變,Tomcat會自動重新加載該WEB應用程序。雖方便,但開銷也大,默認值為false,我們在調(diào)用可以打開,發(fā)布后再關閉。
  • cacheMaxSize:靜態(tài)資源緩存最大值,以KB為單位,默認值為10240KB
  • cachingAllowed:是否允許靜態(tài)資源緩存,默認為true
  • caseSensitive:默認為true,資源文件名大小寫敏感,如果為false大小寫不敏感
  • unpackWAR:默認為true
  • workDir:為WEB應用程序內(nèi)部的Servlet指定臨時讀寫的目錄路徑名。如沒有設置,則Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄

例:

<Content path=”/abc” docBase=”d:/xyz” reloadable=”true” />

Tomcat性能優(yōu)化方案整理

考慮一下這種場景,你開發(fā)了一個應用,它有十分優(yōu)秀的布局設計,最新的特性以及其它的優(yōu)秀特點。但是在性能這方面欠缺,不管這個應用如何都會遭到客戶拒絕??蛻艨偸瞧谕鼈兊膽脩撚懈玫男阅?。

如果你在產(chǎn)品中使用了Tomcat服務器,那么這篇文章就會給你幾方面來提升Tomcat服務器的性能。感謝ITWorld article給本文提供資源。經(jīng)過沉思我已經(jīng)知道了和早期版本相比最新的Tomcat提供更好的性能和穩(wěn)定性。所以一直使用最新的Tomcat版本?,F(xiàn)在本文使用下面幾步來提高Tomcat服務器的性能。

  • 增加JVM堆內(nèi)存大小
  • 修復JRE內(nèi)存泄漏
  • 線程池設置
  • 壓縮
  • 數(shù)據(jù)庫性能調(diào)優(yōu)
  • Tomcat本地庫
  • 其它選項

第一步 – 提高JVM棧內(nèi)存Increase JVM heap memory

你使用過tomcat的話,簡單的說就是“內(nèi)存溢出”. 通常情況下,這種問題出現(xiàn)在實際的生產(chǎn)環(huán)境中.產(chǎn)生這種問題的原因是tomcat使用較少的內(nèi)存給進程,通過配置TOmcat的配置文件(Windows 下的catalina.bat或Linux下的catalina.sh)可以解決這種問題.這種解決方法是通過增加JVM的棧內(nèi)存實現(xiàn)的.也就是說,JVM通常不去調(diào)用垃圾回收器,所以服務器可以更多關注處理web請求,并要求盡快完成。要更改文件(catalina.sh) 位于"\tomcat server folder\bin\catalina.sh",下面,給出這個文件的配置信息,

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"
-Xms – 指定初始化時化的棧內(nèi)存
-Xms – 指定初始化時化的棧內(nèi)存
-Xmx – 指定最大棧內(nèi)存

在重啟你的Tomcat服務器之后,這些配置的更改才會有效。下面將介紹如何處理JRE內(nèi)存泄漏.

第二步 – 解決JRE內(nèi)存泄露

性能表現(xiàn)不佳的另一個主要原因是內(nèi)存泄漏,正如我之前說過:始終使用最新的tomcat服務器以獲得更好的性能和可伸縮性?,F(xiàn)在,這句話變成真的。如果我們使用最新的tomcat版本6.0.26及以上就可以解決這個錯誤,因為它包含了一個監(jiān)聽器來處理JRE和PermGen的內(nèi)存泄漏。使用的監(jiān)聽器是,

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

你可以在server.xml文件中找到這個監(jiān)聽器的配置,server.xml位置在“tomcat project folder/conf/server.xml”。接下來,我們將看看如何調(diào)整連接屬性“maxThreads”。

第三步 – 線程池設置

線程池指定Web請求負載的數(shù)量,因此,為獲得更好的性能這部分應小心處理??梢酝ㄟ^調(diào)整連接器屬性“maxThreads”完成設置。maxThreads的值應該根據(jù)流量的大小,如果值過低,將有沒有足夠的線程來處理所有的請求,請求將進入等待狀態(tài),只有當一個的處理線程釋放后才被處理;如果設置的太大,Tomcat的啟動將花費更多時間。因此它取決于我們給maxThreads設置一個正確的值。

<Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

在上述配置中,maxThreads值設定為“250”,這指定可以由服務器處理的并發(fā)請求的最大數(shù)量。如果沒有指定,這個屬性的默認值為“200”。任何多出的并發(fā)請求將收到“拒絕連接”的錯誤提示,直到另一個處理請求進程被釋放。錯誤看起來如下,

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are
currently busy, waiting. Increase maxThreads (250) or check the servlet status

如果應用提示上述錯誤,務必檢查上述錯誤是否是由于單個請求花費太長時間造成的,這個問題的原因是這樣的,有時候如果數(shù)據(jù)庫連接不釋放的話,進程將不會處理其它請求。

注意: 如果請求的數(shù)量超過了“750”,這將不是意味著將maxThreads屬性值設置為“750”,它意外著最好使用“Tomcat集群”的多個實例。也就是說,如果有“1000”請求,兩個Tomcat實例設置“maxThreads= 500”,而不在單Tomcat實例的情況下設置maxThreads=1000。

根據(jù)我的經(jīng)驗,準確值的設定可以通過將應用在在各種環(huán)境中測試得出。接下來,我們來看看如何壓縮的MIME類型。

第四步- 壓縮

Tomcat有一個通過在server.xml配置文件中設置壓縮的選項。壓縮可以在connector像如下設置中完成,

 <Connector port="8080" protocol="HTTP/1.1"
 connectionTimeout="20000"
 redirectPort="8181" compression="500"
 compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />

在前面的配置中,當文件的大小大于等于500bytes時才會壓縮。如果當文件達到了大小但是卻沒有被壓縮,那么設置屬性compression="on"。否則Tomcat默認設置是“off”。接下來我們將看看如何調(diào)優(yōu)數(shù)據(jù)庫。

第五步- 數(shù)據(jù)庫性能調(diào)優(yōu)

Tomcat性能在等待數(shù)據(jù)庫查詢被執(zhí)行期間會降低。如今大多數(shù)應用程序都是使用可能包含“命名查詢”的關系型數(shù)據(jù)庫。如果是那樣的話,Tomcat會在啟動時默認加載命名查詢,這個可能會提升性能。另一件重要事是確保所有數(shù)據(jù)庫連接正確地關閉。給數(shù)據(jù)庫連接池設置正確值也是十分重要的。我所說的值是指Resource要素的最大空閑數(shù)(maxIdle),最大連接數(shù)(maxActive),最大建立連接等待時間(maxWait)屬性的值。因為配置依賴與應用要求,我也不能在本文指定正確的值。你可以通過調(diào)用數(shù)據(jù)庫性能測試來找到正確的值。

第六步 – Tomcat原生庫

Tomcat的原生庫基于Apache可移植運行時(Apache Portable Runtime簡稱APR),給程序員提供了超強的擴展性和性能,在產(chǎn)品運作中幫助融合原生的服務器技術以展現(xiàn)最佳的性能。想知道安裝說明的朋友請參考Tomcat Native Library – (APR) Installation。

第七步 – 其他選項

這些選項是:

  • 開啟瀏覽器的緩存,這樣讀取存放在webapps文件夾里的靜態(tài)內(nèi)容會更快,大大推動整體性能。
  • 每當開機時,Tomcat服務器應當自動地重啟。
  • 一般情況下HTTPS請求會比HTTP請求慢。如果你想要更好的安全性,即使慢一點我們還是要選擇HTTPS。

設置TOMCAT啟用GZIP壓縮

原理簡介

HTTP 壓縮可以大大提高瀏覽網(wǎng)站的速度,它的原理是,在客戶端請求服務器對應資源后,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。

相對于普通的瀏覽過程HTML ,CSS,Javascript , Text ,它可以節(jié)省40%左右的流量。更為重要的是,它可以對動態(tài)生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網(wǎng)頁也能進行壓縮,壓縮效率也很高。

配置方法

Tomcat5.0以后的版本是支持對輸出內(nèi)容進行壓縮的,使用的是gzip壓縮格式 。

修改%TOMCAT_HOME%/conf/server.xml,修訂節(jié)點如下:

<Connector port="80" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" executor="tomcatThreadPool" URIEncoding="utf-8" 
compression="on" 
compressionMinSize="50" noCompressionUserAgents="gozilla, traviata" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" /> 

從上面節(jié)點的屬性可以看出,要使用gzip壓縮功能,你需要在Connector節(jié)點中加上如下屬性

  • compression="on" 打開壓縮功能
  • compressionMinSize="50" 啟用壓縮的輸出內(nèi)容大小,默認為2KB
  • noCompressionUserAgents="gozilla, traviata" 對于以下的瀏覽器,不啟用壓縮
  • compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮

測試方法

啟用了TOMCAT這個壓縮功能后,我們?nèi)绾蝸頊y試壓縮是否有效呢?

首先Tomcat是根據(jù)瀏覽器請求頭中的accept-encoding來判斷瀏覽器是否支持壓縮功能,如果這個值包含有gzip,就表明瀏覽器支持gzip壓縮內(nèi)容的瀏覽,我們可以用兩種方法來驗證壓縮是否生效。

大家直接通過瀏覽器訪問啟用了壓縮配置的服務器,然后通過抓包工具查看抓到的數(shù)據(jù)包,如果內(nèi)容有很多你看不懂,就說明已經(jīng)啟用壓縮功能了。

通過程序模擬請求

我們用httpclient寫一個簡單的測試程序,代碼如下:

@Test 
public void testGzip() { 
HttpClient httpClient = new HttpClient(); 
GetMethod getMethod = new GetMethod("http://localhost/admin.jsp"); 
try { 
getMethod.addRequestHeader("accept-encoding", "gzip,deflate"); 
getMethod.addRequestHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)"); 
int result = httpClient.executeMethod(getMethod); 
if (result == 200) { 
System.out.println(getMethod.getResponseContentLength()); 
String html = getMethod.getResponseBodyAsString(); 
System.out.println(html); 
System.out.println(html.getBytes().length); 
} 
} catch (HttpException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
getMethod.releaseConnection(); 
} 
} 

執(zhí)行這個junit程序,看看它所輸出的是什么內(nèi)容,如果輸出的是一些亂碼,并且打印內(nèi)容的長度遠小于實際的長度,就說明我們的配置生效了,通過一些其它驗證工具,會發(fā)現(xiàn)網(wǎng)站瀏覽速度會明顯提升。

備注:如果發(fā)現(xiàn)內(nèi)容沒有被壓縮,可以考慮調(diào)整compressionMinSize大小,如果請求資源小于這個數(shù)值,則不會啟用壓縮。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Apache?Tomcat服務部署網(wǎng)站的項目實踐

    Apache?Tomcat服務部署網(wǎng)站的項目實踐

    本文主要介紹了Apache?Tomcat服務部署網(wǎng)站的項目實踐,包括下載和安裝Tomcat,設置環(huán)境變量,配置server.xml文件,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Tomcat服務器 安全設置

    Tomcat服務器 安全設置

    tomcat是一個開源Web服務器,基于Tomcat的Web運行效率高,可以在一般的硬件平臺上流暢運行,因此,頗受Web站長的青睞。不過,在默認配置下其存在一定的安全隱患,可被惡意攻擊。
    2009-08-08
  • Tomcat源碼導入idea的方法

    Tomcat源碼導入idea的方法

    這篇文章主要介紹了Tomcat源碼導入idea的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Tomcat修正JDK原生線程池bug的實現(xiàn)原理

    Tomcat修正JDK原生線程池bug的實現(xiàn)原理

    這篇文章主要介紹了Tomcat是如何修正JDK原生線程池bug的,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Eclipse添加Tomcat Server配置的方法步驟

    Eclipse添加Tomcat Server配置的方法步驟

    這篇文章主要介紹了Eclipse添加Tomcat Server配置的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • IDEA中Smart?Tomcat插件使用教程

    IDEA中Smart?Tomcat插件使用教程

    本文主要介紹了IDEA中Smart?Tomcat插件使用教程,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Tomcat運行時在IDEA控制臺輸出信息中文亂碼的解決方案

    Tomcat運行時在IDEA控制臺輸出信息中文亂碼的解決方案

    本文主要給大家介紹Tomcat運行時在IDEA控制臺輸出信息中文亂碼的解決方案,文中的解決方案介紹的非常詳細,有需要的朋友可以參考閱讀下
    2023-08-08
  • Tomcat如何配置訪問日志和線程數(shù)

    Tomcat如何配置訪問日志和線程數(shù)

    Tomcat是一個功能強大且易于使用的Java Servlet容器,適用于開發(fā)和部署各種類型的Java Web應用程序,本文主要介紹了Tomcat如何配置訪問日志和線程數(shù),以優(yōu)化性能并提高系統(tǒng)可靠性
    2023-11-11
  • Tomcat環(huán)境變量如何配置

    Tomcat環(huán)境變量如何配置

    這篇文章主要以文字敘述的形式為大家詳細介紹了Tomcat環(huán)境變量如何配置,以及驗證方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 使用Tomcat Native提升Tomcat IO效率的方法詳解

    使用Tomcat Native提升Tomcat IO效率的方法詳解

    這篇文章主要介紹了使用Tomcat Native提升Tomcat IO效率的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論