Tomcat 內存和線程配置

在對其進行併發測試時,基本上30個USER上去就當機了,還要修改默認鏈接數設置:如下紅色四行TOMCAT6中好相沒有,手工加上就能夠了,基本上能夠解決鏈接數過大引發的死機。具體數值可跟據實際狀況設置java

 <Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />linux

maxThreads="600" ///最大線程數web

minSpareThreads="100"///初始化時建立的線程數spring

maxSpareThreads="500"///一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。sql

acceptCount="700"//指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處 理 Tomcat6使用安裝版本進行安裝後,使用內存的調整沒法利用修改啓動文件的方式進行,但按缺省方式啓動後若是啓動的應用較多的話Tomcat常常會因 爲內存不足而失去響應,這個時候必須人工調整內存參數: 1.「開始」--「Apache Tomcat 6」--「Configure Tomcat」數據庫

2.選擇Java標籤,在「Initial memory pool(初始內存)」和「Maximum memory pool(最大內存)」中輸入你須要的內存參數便可 與內存相關的tomcat錯誤處理: 1.java.lang.OutOfMemoryError:這個錯誤是由於tomcat JVM的Permanent Generation space(內存的永久保存區域)不足引發的,這個區域是JVM用於用於存放Class和Meta的信息的內存區域,GC(Garbage Collection)不會在主程序運行期對 PermGen space進行清理,因此若是你的應用中有不少CLASS的話,就極可能出現PermGen space錯誤, 這種錯誤常見在web服務器對JSP進行pre compile的時候。若是你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤信息了,症狀是tomcat運行一段時間後失去反應,服務中tomcat服務正常,重啓 tomcat服務後網站又正常響應了。解決方案是人工調整確認大小設置,使用regedit修改註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java中的 Options參數,在後面增長一下數據: -XX:PermSize=64M
-XX:MaxPermSize=128mapache

2.java.lang.OutOfMemoryError: Java heap space Heap size 設置 JVM堆的設置是指java程序運行過程當中JVM能夠調配使用的內存空間的設置.JVM在啓動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。能夠利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。windows

提示:在JVM中若是98%的時間是用於GC且可用的Heap size 不足2%的時候將拋出此異常信息。tomcat

提示:Heap Size 最大不要超過可用物理內存的80%,通常的要將-Xms和-Xmx選項設置爲相同,而-Xmn爲1/4的-Xmx值。使用前面所說的方法進行調整便可服務器

 

=================== Tomcat內存、鏈接數等性能參數設置 默認參數不適合生產環境使用,所以須要修改一些參數

一、修改啓動時內存參數、並指定JVM時區(在windows server 2008 下時間少了8個小時): 在Tomcat上運行j2ee項目代碼時,常常會出現內存溢出的狀況,解決辦法是在系統參數中增長系統參數: window下, 在catalina.bat最前面: set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m 必定加在catalina.bat最前面。 linux下,在catalina.sh最前面增長: JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" 注意:先後兩者區別,有無set,有無雙引號。
二、線程池配置(Tomcat6下) 使用線程池,用較少的線程處理較多的訪問,能夠提升tomcat處理請求的能力。使用方式: 首先。打開/conf/server.xml,增長 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" /> 最大線程500(通常服務器足以),最小空閒線程數20,線程最大空閒時間60秒。 而後,修改<Connector ...>節點,增長executor屬性,如:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" ....../>
注意:能夠多個connector公用1個線程池。
三、調整鏈接相關Connector的參數:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="100" disableUploadTimeout="true"/> 參數說明: * connectionTimeout - 網絡鏈接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。 * keepAliveTimeout - 長鏈接最大保持時間(毫秒)。此處爲15秒。 * maxKeepAliveRequests - 最大長鏈接個數(1表示禁用,-1表示不限制個數,默認100個。通常設置在100~200之間) the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100. * maxHttpHeaderSize - http請求頭信息的最大程度,超過此長度的部分不予處理。通常8K。 * URIEncoding - 指定Tomcat容器的URL編碼格式。 * acceptCount - 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理,默認爲10個。defines the maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full are refused. The default value is 10. * disableUploadTimeout - 上傳時是否使用超時機制 * enableLookups - 是否反查域名,取值爲:true或false。爲了提升處理能力,應設置爲false * bufferSize - defines the size (in bytes) of the buffer to be provided for input streams created by this connector. By default, buffers of 2048 bytes are provided.
* maxSpareThreads - 作多空閒鏈接數,一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程 the maximum number of unused request processing threads that are allowed to exist until the thread pool starts stopping the unnecessary threads. The default value is 50. * maxThreads - 最多同時處理的鏈接數,Tomcat使用線程來處理接收的每一個請求。這個值表示Tomcat可建立的最大的線程數。。 the maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200. * minSpareThreads - 最小空閒線程數,Tomcat初始化時建立的線程數 the number of request processing threads that are created when this Connector is first started. The connector will also make sure it has the specified number of idle processing threads available. This attribute should be set to a value smaller than that set for maxThreads. The default value is 4. * minProcessors - 最小空閒鏈接線程數,用於提升系統處理性能,默認值爲10。(用於Tomcat4中) * maxProcessors - 最大鏈接線程數,即:併發處理的最大請求數,默認值爲75。(用於Tomcat4中) 備註: Tomcat4中能夠經過修改minProcessors和maxProcessors的值來控制線程數。 在Tomcat5+主要對如下參數調整 maxThreads Tomcat使用線程來處理接收的每一個請求。這個值表示Tomcat可建立的最大的線程數。 acceptCount 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理。 connnectionTimeout 網絡鏈接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。 minSpareThreads Tomcat初始化時建立的線程數。 maxSpareThreads 一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。
四、負載均衡、集羣的配置 Tomcat6支持分佈式部署,能夠實現集羣功能,提升響應能力。

五、利用JMX監控Tomcat運行狀況,須要手工調整啓動參數,以下: 打開cataline.bat,增長一行 set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf \logging.properties" linux下修改cataline.sh: JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=%CATALINA_BASE\conf\logging.properties" 注意JDK\jre\lib\management\management.properties文件必須存在。 從新啓動tomcat節點,而後用jconsole鏈接(此處端口wei10090)

 六、Tomcat增長一個應用 在server.xml的Host標籤中增長行 <Context displayName="OA" docBase="/app/web-apps/GACWP" path="" /> path表明上下文名稱,空表示是根路徑。 ================================= Tomcat6.x目錄與server.xml詳解 tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,目前最新版本是6.x,相對5.x性能提高不少,主要優化了內存使用,加強IO能力,從新構造集羣功能。 近期對Tomcat6.x做深刻學習,參考上述聲明的Tomcat全攻略,因爲筆者是2001年針對Tomcat4.x所寫,故參考之並針對 Tomcat6.x作了總結,造成此篇學習筆記,但願對學習的人有所幫助,本文涵蓋了:Tomcat目錄、Server.xml元素講解,數據庫鏈接池配 置、線程池配置、虛擬目錄配置。關於如何下載、安裝、運行Tomcat略,請google,相信有詳細的文章講述。 tomcat的目錄結構以下: 目錄名 bin 存放啓動和關閉tomcat腳本
conf 包含不一樣的配置文件,server.xml(Tomcat的主要配置文件)和web.xml work 存放jsp編譯後產生的class文件 webapp 存放應用程序示例,之後你要部署的應用程序也要放到此目錄 logs 存放日誌文件 lib 這三個目錄主要存放tomcat所需的jar文件
server.xml配置簡介
元素名
屬性 解釋 server port 指定一個端口,這個端口負責監聽關閉tomcat的請求 shutdown
指定向端口發送的命令字符串 GlobalNamingResources
服務器的全局JNDI資源,能夠有子標籤<Resource></Resource> Executor(線程池,一個或多個Connector能夠共享此線程池) name 線程池名稱,名稱必須惟一 namePrefix
線程的名字前綴,用來標記線程名字的,這樣每一個線程就用這個前綴加上線程編號了,好比 catalina-exec-1 、catalina-exec-2 maxThreads
容許的最大線程池裏的線程數量,默認是200,大的併發應該設置的高一些,反正只是限制而已,不佔用資源 minSpareThreads
最小的保持活躍的線程數量,默認是25.這個要根據負載狀況自行調整了。過小了就影響反應速度,太大了白白佔用資源 maxIdleTime
最小的保持活躍的線程數量,默認是25.這個要根據負載狀況自行調整了。過小了就影響反應速度,太大了白白佔用資源 threadPriority
線程的等級。默認是Thread.NORM_PRIORITY service name 指定service的名字 Connector (表示客戶端和service之間的鏈接) port
指定服務器端要建立的端口號,並在這個斷口監聽來自客戶端的請求 minProcessors 服務器啓動時建立的處理請求的線程數 maxProcessors
最大能夠建立的處理請求的線程數 enableLookups
若是爲true,則能夠經過調用request.getRemoteHost()進行DNS查詢來獲得遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址 redirectPort
指定服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號 acceptCount
指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理 connectionTimeout
指定超時的時間數(以毫秒爲單位) Engine (表示指定service中的請求處理機,接收和處理來自Connector的請求) name defaultHost
指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是同樣的 jvmRoute host (表示一個虛擬主機、而且能夠包含Context子節點配置虛擬目錄)
name
指定主機名 appBase
應用程序基本目錄,即存放應用程序的目錄 unpackWARs
若是爲true,則tomcat會自動將WAR文件解壓,不然不解壓,直接從WAR文件中運行應用程序 autoDeploy
自動部署 xmlValidation
是否驗證xml xmlNamespaceAware Realm (表示存放用戶名,密碼及role的數據庫) className
指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口 Context(host子節點配置虛擬目錄)
Path
虛擬目錄名稱 docBase
物理路徑 Debug Debug模式 Reload True 從新加載,修改後自動加載 上面咱們講述了server .xml個元素的含義,下面咱們給出詳細示例 Tomcat數據庫鏈接池配置以下: server.xml配置Resource Xml代碼

1. <Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource"

2. maxActive="100" maxIdle="30" maxWait="10000"

3. username="APP" password="APP"
driverClassName="org.apache.derby.jdbc.ClientDriver"

4. url="jdbc:derby://localhost:1527/springside-example;create=true"/>

context.xml文件增長: Xml代碼

 <WatchedResource>WEB-INF/web.xml</WatchedResource>

 <ResourceLink name="jdbc/ExampleDB" global="jdbc/ExampleDB" type="javax.sql.DataSource"/>

 4. Tomcat共享線程池配置: 取消Executor註釋,修改鏈接數至本身合適的數值既可。

Xml代碼

1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

2. maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/> executor="tomcatThreadPool" 標明此鏈接使用上面配置的名稱爲tomcatThreadPool的鏈接池,無屬性共享鏈接不會生效

 protocol表示使用的是 http協議 端口號爲8080 Java代碼

1. <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"

2. connectionTimeout="20000"

3. executor="tomcatThreadPool"

4. acceptCount="100"

5. useBodyEncodingForURI="true"

6. enableLookups="false"

7. /> 虛擬目錄配置: 在<host></host>之間增長以下 <!-- 配置虛擬目錄,例如:http://localhost:8080 --> Xml代碼

1. <Context path="/" docBase="D:\workspace\code\HBJH\web"></Context> 附件中是取自springside3中,Tomcat production config配置示例,即生產環境下Tomcat配置

相關文章
相關標籤/搜索