天天看點

Tomcat熱部署和虛拟目錄配置

1.tomcat如何配置熱部署

預設就是 

1

<code>&lt;</code><code>host</code> <code>appbase="webapps" autodeploy="true" name="localhost" unpackwars="true"&gt;</code>

如果要實作ide修改代碼的自動部署,可以使用第三方工具

<a href="http://www.zeroturnaround.com/jrebel/" target="_blank">http://www.zeroturnaround.com/jrebel/</a>

1、解壓縮包

2、執行java -jar jrebel-setup.jar

3、會彈出一個安裝界面安裝

4、在myeclipse中配置,找到伺服器(如tomcat)的配置頁面,在tomcat的jdk配置頁面的optional java vm arguments輸入框中加如下參數:

-noverify -javaagent:d:\dev\jrebel\jrebel.jar -drebel.dirs=d:\dev\apache-tomcat-6.0.20\webapps\nmr

第一個路徑是jar包的絕對路徑,第二個位址是說想讓哪個目錄下的類更改後不重新開機服務。

如果optional java vm arguments輸入框中有其他參數,用空格隔開。

5、釋出項目,就能在控制台看到效果。

類就可以改變之後不用重新開機tomcat。

目前流行的伺服器都支援。詳細看官方網站。

2.配置web項目的虛拟目錄

配置之前,web項目檔案夾裡必須建立個檔案夾:web-inf,此檔案夾裡必須有個web.xml的檔案。這些都可以直接在tomcat/webapps/root/裡複制過來,放到自己的web項目中即可。

如果不配置,則需将web項目的檔案夾放在tomcat/webapps/下,通路路徑為:http://localhost:8080/web項目檔案夾名稱

如果web項目放在其他盤符,則在tomcat目錄/conf/檔案夾下:編輯server.xml文檔,

在文檔的末尾處,添加:&lt;context path="/nala" docbase="e:\www\nala"&gt;&lt;/context&gt;,如圖所示

Tomcat熱部署和虛拟目錄配置

3.tomcat 如何優化?

這裡以tomcat7的參數配置為例,需要修改conf/server.xml檔案,修改連接配接數,關閉用戶端dns查詢。

參數解釋:

uriencoding=”utf-8″ :使得tomcat可以解析含有中文名的檔案的url,真友善,不像apache裡還有搞個mod_encoding,還要手工編譯

maxsparethreads : 如果空閑狀态的線程數多于設定的數目,則将這些線程中止,減少這個池中的線程總數。

minsparethreads : 最小備用線程數,tomcat啟動時的初始化的線程數。

enablelookups : 這個功效和apache中的hostnamelookups一樣,設為關閉。

connectiontimeout : connectiontimeout為網絡連接配接逾時時間毫秒數。

maxthreads : maxthreads tomcat使用線程來處理接收的每個請求。這個值表示tomcat可建立的最大的線程數,即最大并發數。

acceptcount : acceptcount是當線程數達到maxthreads後,後續請求會被放入一個等待隊列,這個acceptcount是這個隊列的大小,如果這個隊列也滿了,就直接refuse connection

maxprocessors與minprocessors : 在 java中線程是程式運作時的路徑,是在一個程式中與其它控制線程無關的、能夠獨立運作的代碼段。它們共享相同的位址空間。多線程幫助程式員寫出cpu最 大使用率的高效程式,使空閑時間保持最低,進而接受更多的請求。

通常windows是1000個左右,linux是2000個左右。

useurivalidationhack:

我們來看一下tomcat中的一段源碼:

【security】

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>if</code> <code>(connector.getuseurivalidationhack()) {</code>

<code>string uri = validate(request.getrequesturi());</code>

<code>if</code> <code>(uri == </code><code>null</code><code>) {</code>

<code>res.setstatus(</code><code>400</code><code>);</code>

<code>res.setmessage(“invalid uri”);</code>

<code>throw</code> <code>new</code> <code>ioexception(“invalid uri”);</code>

<code>} </code><code>else</code> <code>{</code>

<code>req.requesturi().setstring(uri);</code>

<code>// redoing the uri decoding</code>

<code>req.decodeduri().duplicate(req.requesturi());</code>

<code>req.geturldecoder().convert(req.decodeduri(), </code><code>true</code><code>);</code>

<code>}</code>

  

可以看到如果把useurivalidationhack設成”false”,可以減少它對一些url的不必要的檢查進而減省開銷。

enablelookups=”false” : 為了消除dns查詢對性能的影響我們可以關閉dns查詢,方式是修改server.xml檔案中的enablelookups參數值。

disableuploadtimeout :類似于apache中的keeyalive一樣

給tomcat配置gzip壓縮(http壓縮)功能

<code>compression=”on” compressionminsize=”</code><code>2048</code><code>″</code>

<code>compressablemimetype=”text/html,text/xml,text/javascript,text/css,text/plain”</code>

http 壓縮可以大大提高浏覽網站的速度,它的原理是,在用戶端請求網頁後,從伺服器端将網頁檔案壓縮,再下載下傳到用戶端,由用戶端的浏覽器負責解壓縮并浏覽。相對于普通的浏覽過程html,css,javascript , text ,它可以節省40%左右的流量。更為重要的是,它可以對動态生成的,包括cgi、php , jsp , asp , servlet,shtml等輸出的網頁也能進行壓縮,壓縮效率驚人。

1)compression=”on” 打開壓縮功能

2)compressionminsize=”2048″ 啟用壓縮的輸出内容大小,這裡面預設為2kb

3)nocompressionuseragents=”gozilla, traviata” 對于以下的浏覽器,不啟用壓縮

4)compressablemimetype=”text/html,text/xml” 壓縮類型

最後不要忘了把8443端口的地方也加上同樣的配置,因為如果我們走https協定的話,我們将會用到8443端口這個段的配置,對吧?

<code>&lt;!–enable tomcat ssl–&gt;</code>

<code>&lt;</code><code>connector</code> <code>port=”8443″ protocol=”http/1.1″</code>

<code>uriencoding=”utf-8″ minsparethreads=”25″ maxsparethreads=”75″</code>

<code>enablelookups=”false” disableuploadtimeout=”true” connectiontimeout=”20000″</code>

<code>acceptcount=”300″ maxthreads=”300″ maxprocessors=”1000″ minprocessors=”5″</code>

<code>useurivalidationhack=”false”</code>

<code>compression=”on” compressionminsize=”2048″</code>

<code>sslenabled=”true”</code>

<code>scheme=”https” secure=”true”</code>

<code>clientauth=”false” sslprotocol=”tls”</code>

<code>keystorefile=”d:/tomcat2/conf/shnlap93.jks” keystorepass=”aaaaaa”</code>

<code>/&gt;</code>

好了,所有的tomcat優化的地方都加上了。

tomcat預設可以使用的記憶體為128mb,windows下,在檔案{tomcat_home}/bin/catalina.bat,unix下,在檔案catalinahome/bin/catalina.sh的前面,增加如下設定:javaopts=”‘catalinahome/bin/catalina.sh的前面,增加如下設定:javaopts=”‘java_opts” -xms[初始化記憶體大小] -xmx[可以使用的最大記憶體] 

或 

設定環境變量:export java_opts=””javaopts”−xms[初始化記憶體大小]−xmx[可以使用的最大記憶體]”一般說來,你應該使用實體記憶體的80javaopts”−xms[初始化記憶體大小]−xmx[可以使用的最大記憶體]”一般說來,你應該使用實體記憶體的80java_opts” -xms700 —xmx700 

# source /etc/profile

【參數說明】

-xms 是指設定程式啟動時占用記憶體大小。一般來講,大點,程式會啟動的 快一點,但是也可能會導緻機器暫時間變慢。

-xmx 是指設定程式運作期間最大可占用的記憶體大小。如果程式運作需要占 用更多的記憶體,超出了這個設定值,就會抛出outofmemory 異常。

-xss 是指設定每個線程的堆棧大小。這個就要依據你的程式,看一個線程 大約需要占用多少記憶體,可能會有多少線程同時運作等。

-xx:permsize設定非堆記憶體初始值,預設是實體記憶體的1/64 。

-xx:maxpermsize設定最大非堆記憶體的大小,預設是實體記憶體的1/4。

tomcat的運作模式有3種.修改他們的運作模式.3種模式的運作是否成功,可以看他的啟動控制台,或者啟動日志.或者登入他們的預設頁面http://localhost:8080/檢視其中的伺服器狀态。

(1)bio

預設的模式,性能非常低下,沒有經過任何優化處理和支援.

(2)nio

利用java的異步io護理技術,no blocking io技術.

想運作在該模式下,直接修改server.xml裡的connector節點,修改protocol為

&lt;connector port=”80″ protocol=”org.apache.coyote.http11.http11nioprotocol” 

connectiontimeout=”20000″ 

uriencoding=”utf-8″ 

usebodyencodingforuri=”true” 

enablelookups=”false” 

redirectport=”8443″ /&gt;

啟動後,就可以生效。

(3)apr

安裝起來最困難,但是從作業系統級别來解決異步的io問題,大幅度的提高性能.

必須要安裝apr和native,直接啟動就支援apr。下面的修改純屬多餘,僅供大家擴充知識,但仍然需要安裝apr和native