一、Tomcat的缺省是多少,怎么修改
Tomcat的缺省端口號是8080.修改Tomcat端口號:
1.找到Tomcat目錄下的conf文件夾
2.進入conf文件夾里面找到server.xml文件
3.打開server.xml文件
4.在server.xml文件里面找到下列信息
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ connectionTimeout=”20000″ disableUploadTimeout=”true” />
5.把port=”8080″改成port=”8888″,並且保存
6.啟動Tomcat,並且在IE瀏覽器里面的地址欄輸入http://127.0.0.1:8888/
7、tomcat默認采用的BIO模型,在幾百並發下性能會有很嚴重的下降。tomcat自帶還有NIO的模型,另外也可以調用APR的庫來實現操作系統級別控制。NIO模型是內置的,調用很方便,只需要將上面配置文件中protocol修改成 org.apache.coyote.http11.Http11NioProtocol,重啟即可生效。如下面的參數配置,默認的是HTTP/1.1。
<Connector port=”8080″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ redirectPort=”8443″ maxThreads=”500″ minSpareThreads=”20″ acceptCount=”100″ disableUploadTimeout=”true”
enableLookups=”false” URIEncoding=”UTF-8″ />
二、tomcat 如何優化?
1、優化連接配置.這里以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】
if (connector.getUseURIValidationHack()) {
String uri = validate(request.getRequestURI());
if (uri == null) {
res.setStatus(400);
res.setMessage(“Invalid URI”);
throw new IOException(“Invalid URI”);
} else {
req.requestURI().setString(uri);
// Redoing the URI decoding
req.decodedURI().duplicate(req.requestURI());
req.getURLDecoder().convert(req.decodedURI(), true);
可以看到如果把useURIValidationHack設成”false”,可以減少它對一些url的不必要的檢查從而減省開銷。
enableLookups=”false” :為了消除DNS查詢對性能的影響我們可以關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值。
disableUploadTimeout :類似於Apache中的keeyalive一樣
給Tomcat配置gzip壓縮(HTTP壓縮)功能
compression=”on” compressionMinSize=”2048″ compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
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端口這個段的配置,對吧?{
tomcat設置https端口時,8443和443區別:
1. 8443端口在訪問時需要加端口號,相當於http的8080,不可通過域名直接訪問,需要加上端口號;https://yuming.com:8443。
2. 443端口在訪問時不需要加端口號,相當於http的80,可通過域名直接訪問;例:https://yuming.com。
*問:https使用域名訪問網站,而不顯示端口號?
答:將端口號設置為443,即可通過域名直接訪問網站
}
<!–enable tomcat ssl–>
<Connector port=”8443″ protocol=”HTTP/1.1″ URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″ acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″ useURIValidationHack=”false” compression=”on” compressionMinSize=”2048″ compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
SSLEnabled=”true”scheme=”https” secure=”true”clientAuth=”false” sslProtocol=”TLS”keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”/>
好了,所有的Tomcat優化的地方都加上了。
2、優化JDK
Tomcat默認可以使用的內存為128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下設置:
JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化內存大小] -Xmx[可以使用的最大內存]
或
設置環境變量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化內存大小] -Xmx[可以使用的最大內存]”
一般說來,你應該使用物理內存的 80% 作為堆大小。如果本機上有Apache服務器,可以先折算Apache需要的內存,然后修改堆大小。建議設置為70%;建議設置[[初始化內存大小]等於[可以使用的最大內存],這樣可以減少平凡分配堆而降低性能。
本例使用加入環境變量的方式:
# vi /etc/profile
加入:export JAVA_OPTS=””$JAVA_OPTS” -Xms700 —Xmx700
# source /etc/profile
【參數說明】
-Xms 是指設定程序啟動時占用內存大小。一般來講,大點,程序會啟動的 快一點,但是也可能會導致機器暫時間變慢。
-Xmx 是指設定程序運行期間最大可占用的內存大小。如果程序運行需要占 用更多的內存,超出了這個設置值,就會拋出OutOfMemory 異常。
-Xss 是指設定每個線程的堆棧大小。這個就要依據你的程序,看一個線程 大約需要占用多少內存,可能會有多少線程同時運行等。
-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64 。
-XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。
三、tomcat 有那幾種Connector 運行模式?
tomcat的運行模式有3種.修改他們的運行模式.3種模式的運行是否成功,可以看他的啟動控制台,或者啟動日志.或者登錄他們的默認頁面http://localhost:8080/查看其中的服務器狀態。
1)bio
默認的模式,性能非常低下,沒有經過任何優化處理和支持.
2)nio
利用java的異步io護理技術,no blocking IO技術.
想運行在該模式下,直接修改server.xml里的Connector節點,修改protocol為
<Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />啟動后,就可以生效。
3)apr
安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能.
必須要安裝apr和native,直接啟動就支持apr。下面的修改純屬多余,僅供大家擴充知識,但仍然需要安裝apr和native。如nio修改模式,修改protocol為org.apache.coyote.http11.Http11AprProtocol
四、tomcat調優
1. JVM參數調優:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。這兩個值的大小一般根據需要進行設置。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。在catalina.bat中,設置JAVA_OPTS='-Xms256m -Xmx512m',表示初始化內存為256MB,可以使用的最大內存為512MB。
2. 禁用DNS查詢
當web應用程序想要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務器查找機器名轉換為IP地址。DNS查詢需要占用網絡,並且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。為了消除DNS查詢對性能的影響我們可以關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值:
Tomcat4
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="80" minProcessors="5" maxProcessors="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true" />
Tomcat5
<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true"/>
3. 調整線程數
通過應用程序的連接器(Connector)進行性能控制的的參數是創建的處理請求的線程數。Tomcat使用線程池加速響應速度來處理請求。在Java中線程是程序運行時的路徑,是在一個程序中與其它控制線程無關的、能夠獨立運行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最大利用率的高效程序,使空閑時間保持最低,從而接受更多的請求。
Tomcat4中可以通過修改minProcessors和maxProcessors的值來控制線程數。這些值在安裝后就已經設定為默認值並且是足夠使用的,但是隨着站點的擴容而改大這些值。minProcessors服務器啟動時創建的處理請求的線程數應該足夠處理一個小量的負載。也就是說,如果一天內每秒僅發生5次單擊事件,並且每個請求任務處理需要1秒鍾,那么預先設置線程數為5就足夠了。但在你的站點訪問量較大時就需要設置更大的線程數,指定為參數maxProcessors的值。maxProcessors的值也是有上限的,應防止流量不可控制(或者惡意的服務攻擊),從而導致超出了虛擬機使用內存的大小。如果要加大並發連接數,應同時加大這兩個參數。web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。
在Tomcat5對這些參數進行了調整,請看下面屬性:
maxThreads Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。
acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。
connnectionTimeout 網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。
minSpareThreads Tomcat初始化時創建的線程數。
maxSpareThreads 一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。
最好的方式是多設置幾次並且進行測試,觀察響應時間和內存使用情況。在不同的機器、操作系統或虛擬機組合的情況下可能會不同,而且並不是所有人的web站點的流量都是一樣的,因此沒有一刀切的方案來確定線程數的值。
Tomcat作為Web服務器,它的處理性能直接關系到用戶體驗,下面是幾種常見的優化措施:
一、掉對web.xml的監視,把jsp提前編輯成Servlet。有富余物理內存的情況,加大tomcat使用的jvm的內存
二、服務器資源
服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響。
(1) 對於高並發情況下會有大量的運算,那么CPU的速度會直接影響到處理速度。
(2) 內存在大量數據處理的情況下,將會有較大的內存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等參數對內存不同功能塊進行划分。我們之前就遇到過內存分配不足,導致虛擬機一直處於full GC,從而導致處理能力嚴重下降。
(3) 硬盤主要問題就是讀寫性能,當大量文件進行讀寫時,磁盤極容易成為性能瓶頸。最好的辦法還是利用下面提到的緩存。
三、利用緩存和壓縮
對於靜態頁面最好是能夠緩存起來,這樣就不必每次從磁盤上讀。這里我們采用了Nginx作為緩存服務器,將圖片、css、js文件都進行了緩存,有效的減少了后端tomcat的訪問。
另外,為了能加快網絡傳輸速度,開啟gzip壓縮也是必不可少的。但考慮到tomcat已經需要處理很多東西了,所以把這個壓縮的工作就交給前端的Nginx來完成。
除了文本可以用gzip壓縮,其實很多圖片也可以用圖像處理工具預先進行壓縮,找到一個平衡點可以讓畫質損失很小而文件可以減小很多。曾經我就見過一個圖片從300多kb壓縮到幾十kb,自己幾乎看不出來區別。
四、采用集群
單個服務器性能總是有限的,最好的辦法自然是實現橫向擴展,那么組建tomcat集群是有效提升性能的手段。我們還是采用了Nginx來作為請求分流的服務器,后端多個tomcat共享session來協同工作。
五、 優化tomcat參數
這里以tomcat7的參數配置為例,需要修改conf/server.xml文件,主要是優化連接配置,關閉客戶端dns查詢。
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="20"
acceptCount="100"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />