基本常見的幾種調(diào)優(yōu)方式:線程统刮,內(nèi)存,使用Apache+JK+Tomcat配置(負(fù)載均衡)等
第一:不使用tomcat線程池
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>
1:最大連接數(shù):maxThreads
tomcat同時(shí)處理的最大線程數(shù)量
配置依據(jù):
(1)哎垦、部署的程序偏計(jì)算型,主要利用cpu資源,應(yīng)該將該參數(shù)設(shè)置小一點(diǎn),減小同一時(shí)間搶占cpu資源的線程個(gè)數(shù)吹埠。
(2)、部署的程序?qū)o唧领、數(shù)據(jù)庫占用時(shí)間較長(zhǎng)藻雌,線程處于等待的時(shí)間較長(zhǎng),應(yīng)該將該參數(shù)調(diào)大一點(diǎn)斩个,增加處理個(gè)數(shù)胯杭。
應(yīng)該注意:如果線程數(shù)過大,那么cpu用在線程切換的時(shí)間占的比重會(huì)增大受啥,系統(tǒng)性能會(huì)降低做个。
2鸽心、最大排隊(duì)數(shù) acceptCount
當(dāng)tomcat的線程數(shù)達(dá)到maxThreads后,新的請(qǐng)求就會(huì)排隊(duì)等待居暖,超過排隊(duì)數(shù)的請(qǐng)求會(huì)被拒絕顽频。
我一般設(shè)置和maxThreads相同。
參數(shù)的設(shè)置需要進(jìn)行測(cè)試太闺,找到一個(gè)合理的點(diǎn)糯景。
第二:使用tomcat線程池
首先打開共享的線程池
之所以叫共享線程池,意思是所有的connector都可以共同使用這個(gè)線程池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50" maxIdleTime="60000"/>
配置文件中本來就有的省骂,默認(rèn)前后是注釋掉的蟀淮,去掉就可以了。
然后connector中指定使用共享線程池
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000" executor="tomcatThreadPool"
redirectPort="8448" URIEncoding="UTF-8" />
一旦使用了線程池钞澳,則其它的線程屬性怠惶,比如 maxThreads等將被忽略 。
在運(yùn)行多個(gè)Connector的狀況下轧粟,這樣處理非常有用策治,而且每個(gè)Connector必須設(shè)置一個(gè)maxThread值,但不希望Tomcat實(shí)例并發(fā)使用的線程最大數(shù)永遠(yuǎn)與所有連接器maxThread數(shù)量的總和一樣高兰吟。
這是因?yàn)槿绻@樣處理通惫,則需要占用太多的硬件資源。相反揽祥,您可以使用Executor元素配置一個(gè)共享線程池讽膏,而且所有的Connector都能共享這個(gè)線程池。
警告:為了讓連接器使用Executor的線程池拄丰,則在server.xml文件中府树,Executor必須列示在Connector之前。
下面顯示了Executor的屬性料按。
屬性:className奄侠、含義:Executor實(shí)現(xiàn)的完全限定的Java類名、默認(rèn)值:org.apache.catalina.core.StandardThread-Executor载矿。
屬性:daemon垄潮、含義:決定這一Executor的線程是否應(yīng)該為后臺(tái)線程。如果JVM中的所有其他非后臺(tái)線程都結(jié)束了闷盔,則后臺(tái)線程結(jié)束弯洗。
要獲得有關(guān)后臺(tái)線程的詳細(xì)解釋,參見java.lang.Thread的Java 1.5(及更高版本)Javadoc網(wǎng)頁逢勾、默認(rèn)值:false牡整。
屬性:name、含義:共享線程池的名字溺拱。這是Connector為了共享線程池要引用的名字逃贝。該名字必須唯一谣辞、默認(rèn)值:None;需要的參數(shù)沐扳。
屬性:namePrefix泥从、含義:在JVM上,每個(gè)運(yùn)行線程都可以有一個(gè)name 字符串沪摄。這一屬性為線程池中每個(gè)線程的name字符串設(shè)置了一個(gè)前綴躯嫉,Tomcat將把線程號(hào)追加到這一前綴的后面、默認(rèn)值:tomcat-exec-卓起。
屬性:maxIdleTime和敬、含義:在Tomcat關(guān)閉一個(gè)空閑線程之前凹炸,允許空閑線程持續(xù)的時(shí)間(以毫秒為單位)戏阅。只有當(dāng)前活躍的線程數(shù)大于minSpareThread的值,才會(huì)關(guān)閉空閑線程啤它、默認(rèn)值:60000(一分鐘)奕筐。
屬性:maxThreads、含義:該線程池可以容納的最大線程數(shù)变骡、默認(rèn)值:200离赫。
屬性:minSpareThreads、含義:Tomcat應(yīng)該始終打開的最小不活躍線程數(shù)塌碌、默認(rèn)值:25渊胸。
屬性:threadPriority、含義:整數(shù)值台妆,表示線程池中所有線程的線程優(yōu)先權(quán)翎猛。
要獲得有關(guān)線程優(yōu)先權(quán)的詳細(xì)解釋,參見java.lang.Thread的Java 1.5(及更高版本)Javadoc網(wǎng)頁接剩、默認(rèn)值:Thread.NORM_PRIORITY