tomcat默認參數是為開發環境制定,而非適合生產環境,尤其是內存和線程的配置,默認都很低,容易成為性能瓶頸。
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入
java_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"或者JAVA_OPTS="-Xms128m -Xmx2048m -XX:NewSize=20m -XX:MaxNewSize=128m -XX:PermSize=20m -XX:MaxPermSize=128m -Duser.timezone=GMT+8 -XX:+HeapDumpOnOutOfMemoryError"windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m最大堆內存分別是1G和2G,對于現在的硬件還是偏低,實施時,還是按照機器具體硬件配置優化。
tomcat 線程優化
<Connector port="80" PRotocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"connectionTimeout="20000" redirectPort="8443" />maxThreads="600" ///最大線程數minSpareThreads="100"///初始化時創建的線程數maxSpareThreads="500"///一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。acceptCount="700"//指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
這里是http connector的優化,如果使用apache和tomcat做集群的負載均衡,并且使用ajp協議做apache和tomcat的協議轉發,那么還需要優化ajp connector。
<Connector port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"connectionTimeout="20000" redirectPort="8443" />
由于tomcat有多個connector,所以tomcat線程的配置,又支持多個connector共享一個線程池。
首先。打開/conf/server.xml,增加
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />最大線程500(一般服務器足以),最小空閑線程數20,線程最大空閑時間60秒。
然后,修改<Connector ...>節點,增加executor屬性,executor設置為線程池的名字:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" />可以多個connector公用1個線程池,所以ajp connector也同樣可以設置使用tomcatThreadPool線程池。
禁用DNS查詢
當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的ip地址或者通過域名服務器查找機器名 轉換為IP地址。
DNS查詢需要占用網絡,并且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。
修改server.xml文件中的Connector元素,修改屬性enableLookups參數值: enableLookups="false"
如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
設置session過期時間
conf/web.xml中通過參數指定:
<session-config> <session-timeout>180</session-timeout> </session-config> 單位為分鐘。
Apr插件提高Tomcat性能
Tomcat可以使用APR來提供超強的可伸縮性和性能,更好地集成本地服務器技術.
APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括訪問高級IO功能(例如sendfile,epoll和OpenSSL),OS級別功能(隨機數生成,系統狀態等等),本地進程管理(共享內存,NT管道和UNIX sockets)。這些功能可以使Tomcat作為一個通常的前臺WEB服務器,能更好地和其它本地web技術集成,總體上讓Java更有效率作為一個高性能web服務器平臺而不是簡單作為后臺容器。
在產品環境中,特別是直接使用Tomcat做WEB服務器的時候,應該使用Tomcat Native來提高其性能
要測APR給tomcat帶來的好處最好的方法是在慢速網絡上(模擬Internet),將Tomcat線程數開到300以上的水平,然后模擬一大堆并發請求。 如果不配APR,基本上300個線程狠快就會用滿,以后的請求就只好等待。但是配上APR之后,并發的線程數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來。 在局域網環境測,就算是400個并發,也是一瞬間就處理/傳輸完畢,但是在真實的Internet環境下,頁面處理時間只占0.1%都不到,絕大部分時間都用來頁面傳輸。如果不用APR,一個線程同一時間只能處理一個用戶,勢必會造成阻塞。所以生產環境下用apr是非常必要的。
(1)安裝APR tomcat-native apr-1.3.8.tar.gz 安裝在/usr/local/apr #tar zxvf apr-1.3.8.tar.gz #cd apr-1.3.8 #./configure;make;make install apr-util-1.3.9.tar.gz 安裝在/usr/local/apr/lib #tar zxvf apr-util-1.3.9.tar.gz #cd apr-util-1.3.9 #./configure --with-apr=/usr/local/apr ----with-java-home=JDK;make;make install #cd apache-tomcat-6.0.20/bin #tar zxvf tomcat-native.tar.gz #cd tomcat-native/jni/native #./configure --with-apr=/usr/local/apr;make;make install (2)設置 Tomcat 整合 APR 修改 tomcat 的啟動 shell (startup.sh),在該文件中加入啟動參數: CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。 (3)判斷安裝成功: 如果看到下面的啟動日志,表示成功。 2007-4-26 15:34:32 org.apache.coyote.http11.Http11AprProtocol init轉自:http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html
新聞熱點
疑難解答