Tomcat性能優化總結

層級優化!(JAVA_OPTS參數和主要元素的優化)javascript

Tomcat大體元素架構:server--->service-->Engine-->Host-->Contextcss

Tomcat有可使用三種協議:HTTPAJPHTTPShtml

tomcat默認採用的BIO模型java

tomcat的運行模式有3種bio,nio,apr(額外安裝),例如:web

protocol="org.apache.coyote.http11.Http11Nio2Protocol"apache

Tomcat各個元素裏面都有listener監聽器,由Service層的鏈接器connector經過線程池(Thread Pool)調用執行器(Executor),Connector的做用是接收鏈接請求,建立Request和Response對象用於和請求端交換數據;而後分配線程攜帶該request和response交給綁定的Engine來處理,最後把處理後的Request和Response返回給客戶端。windows

tomcat在啓動時,會將web項目中WEB-INF/web.xml和本身的conf/web.xml進行合併,而後在ContextConfig類下的configureContext()統一解析這些內容瀏覽器

因此,沒必要要的配置要刪除,以減小Tomcat解析成本。tomcat

像在conf/web.xml的DefaultServlet或JspServlet,jspmap,mime,歡迎頁面按需來配置。安全

conf/server.xml的Listener監聽器中,VersionLoggerListener做用是顯示版本和JDK環境,能夠刪除;AprLifecycleListener做用:加載APR庫使用,這個配置僅當connector的protocol設置爲AJP/1.3時有用,若是非AJP/1.3,能夠刪除。

GlobalResourcesLifecycleListener做用於全局資源

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

tomcat須要集成到Apache服務器時才使用這個<connector protocol=」AJP/1.3」/>

Server元素的port監聽關閉服務的請求

Connector

port:指定服務器端要建立的端口號,並在這個斷口監聽來自客戶端的請求

minProcessors:服務器啓動時建立的處理請求的線程數

maxProcessors:最大能夠建立的處理請求的線程數

enableLookups:若是爲true,則能夠經過調用request.getRemoteHost()進行DNS查詢來獲得遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址

redirectPort:指定服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號

acceptCount:指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理

maxConnections:達到這個值以後,將繼續接受鏈接,可是不處理,能繼續接受多少根據acceptCount的值

minSpareThreads:最小空閒線程數

connectionTimeout:指定超時的時間數(以毫秒爲單位)

tomcat默認鏈接池有限制,能夠爲connector配置本身的鏈接池,例如:

<Connector executor="tomcatThreadPool"port="8080" protocol="HTTP/1.1"

jvm參數優化

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

各參數詳解:

-Xms:設置JVM初始內存大小(默認是物理內存的1/64)

-Xmx:設置JVM可使用的最大內存(默認是物理內存的1/4,建議:物理內存80%)

-Xmn:設置JVM最小內存(128-256m就夠了,通常不設置)

 

-XX:PermSize :爲JVM啓動時Perm的內存大小

-XX:MaxPermSize :爲最大可佔用的Perm內存大小(默認爲32M)

-XX:MaxNewSize,默認爲16M

-XX:NewSize :默認爲2M,此值設大可調大新對象區,減小Full
GC次數

-XX:NewRatio :改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認爲8)

-XX:SurvivorRatio :改變Eden對象空間和殘存空間的尺寸比例,意思是Eden對象空

間的尺寸比殘存空間大survivorRatio+2倍(缺省值是10)

-XX:userParNewGC 可用來設置並行收集【多CPU】

-XX:ParallelGCThreads 可用來增長並行度【多CPU】

-XXUseParallelGC 設置後可使用並行清除收集器【多CPU】

1. conf/server.xml中Executor對應的相關參數

<!--鏈接池設置-->
<Executor 
name="tomcatThreadPool" --線程池名
namePrefix="catalina-exec-" --線程名稱前綴 namePrefix+threaNumber
maxThreads="1000" --池中最大線程數
minSpareThreads="100" --活躍線程數 會一直存在
maxIdleTime="60000" --線程空閒時間,超過該時間,線程會被銷燬 ms
maxQueueSize="Integer.MAX_VALUE" --被執行前線程的排隊數目
prestartminSpareThreads="false" --啓動線程池時,是否啓用minSpareThreads部分線程
threadPriority="5" --線程池中線程優先級 1~10
className="org.apache.catalina.core.StandardThreadExecutor" --線程實現類 自定義線程需時間 org.apache.catalina.Executor類
/>
<!--當配置了鏈接池時,須要配置該鏈接器-->
<Connector 
executor="tomcatThreadPool" --線程池名
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />

2.conf/server.xml中Connector對應的相關參數


<Connector 
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol" --協議類型 
disableUploadTimeout="true"
keepAliveTimeout="20000"
connectionTimeout="20000" --已接受,但未被處理的請求的等待超時時間 ms
redirectPort="8443" --安全通訊的轉發端口 
URIEncoding="UTF-8"--URL編碼字符集
minSpareThreads="100" --默認初始化和保持空閒的線程數
enableLookups="false"--關閉DNS反向查詢
useURIValidationHack="false" --關閉沒必要要的檢查
maxThreads="1000" --處理請求線程的最大數目 未配置爲200 此屬性會被忽略
acceptCount="1000" --所用可能的線程都在使用時傳入鏈接請求的最大長度
disableUploadTimeout="true" --設置容許更長的超時鏈接
maxConnections="1000"--接受和處理的最大鏈接數(nio/nio2 1000,apr 8192)
maxHttpHeaderSize="8192"--請求和響應http頭的最大大小 8k
tcpNoDelay="true" --tcp不延遲
compression="on"--是否啓用壓縮 on off force 
compressionMinSize="2048" --壓縮前數據最小值 2k byte
noCompressionUserAgents="gozilla,traviata" --設置哪些瀏覽器不壓縮
compressableMimeType="text/html,text/xml,text/css,application/javascript,text/plain" --設置壓縮的文件類型
/>

3. 有關 JAVA_OPTS

set JAVA_OPTS=
-server 
-Xms1000M 
-Xmx1000M #-Xms與-Xmx設成同樣的值,避免JVM由於頻繁的GC致使性能大起大落
-Xss512k 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+DisableExplicitGC 
-XX:MaxTenuringThreshold=15 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:LargePageSizeInBytes=128m 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly

-Djava.awt.headless=true

4. 禁用8005端口

telnet localhost 8005 而後輸入 SHUTDOWN 就能夠關閉 Tomcat,爲了安全咱們要禁用該功能

默認值:

<Server port="8005" shutdown="SHUTDOWN">
修改成:

<Server port="-1" shutdown="SHUTDOWN">---------------------

相關文章
相關標籤/搜索