日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat配置参数优化

發(fā)布時間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat配置参数优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要:?Tomcat在使用的過程中會遇到很多報錯,有些是程序的報錯,但還有一部分是tomcat本身的報錯,我們可以通過優(yōu)化tomcat的初始配置來提高tomcat的性能。Tomcat的優(yōu)化主要體現(xiàn)在兩方面:內(nèi)存、并發(fā)連接數(shù)。 1、內(nèi)存優(yōu)化: 優(yōu)化內(nèi)存,主要是在bin/catalina.bat/sh 配置文...

Tomcat在使用的過程中會遇到很多報錯,有些是程序的報錯,但還有一部分是tomcat本身的報錯,我們可以通過優(yōu)化tomcat的初始配置來提高tomcat的性能。Tomcat的優(yōu)化主要體現(xiàn)在兩方面:內(nèi)存、并發(fā)連接數(shù)。

1、內(nèi)存優(yōu)化:

優(yōu)化內(nèi)存,主要是在bin/catalina.bat/sh 配置文件中進(jìn)行。linux上,在catalina.sh中添加:

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

其中:

? -server:啟用jdk的server版本。 ? -Xms:虛擬機(jī)初始化時的最小堆內(nèi)存。 ? -Xmx:虛擬機(jī)可使用的最大堆內(nèi)存。 #-Xms與-Xmx設(shè)成一樣的值,避免JVM因為頻繁的GC導(dǎo)致性能大起大落 ? -XX:PermSize:設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64。 ? -XX:MaxNewSize:新生代占整個堆內(nèi)存的最大值。 ? -XX:MaxPermSize:Perm(俗稱方法區(qū))占整個堆內(nèi)存的最大值,也稱內(nèi)存最大永久保留區(qū)域。

1)錯誤提示:java.lang.OutOfMemoryError:Java heap space

Tomcat默認(rèn)可以使用的內(nèi)存為128MB,在較大型的應(yīng)用項目中,這點內(nèi)存是不夠的,有可能導(dǎo)致系統(tǒng)無法運行。常見的問題是報Tomcat內(nèi)存溢出錯誤,Outof Memory(系統(tǒng)內(nèi)存不足)的異常,從而導(dǎo)致客戶端顯示500錯誤,一般調(diào)整Tomcat的-Xms和-Xmx即可解決問題,通常將-Xms和-Xmx設(shè)置成一樣,堆的最大值設(shè)置為物理可用內(nèi)存的最大值的80%。

set JAVA_OPTS=-Xms512m-Xmx512m

2)錯誤提示:java.lang.OutOfMemoryError: PermGenspace

PermGenspace的全稱是Permanent Generationspace,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGenspace中,它和存放類實例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對PermGenspace進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯誤,這種錯誤常見在web服務(wù)器對JSP進(jìn)行precompile的時候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認(rèn)的大小(4M)那么就會產(chǎn)生此錯誤信息了。解決方法:

setJAVA_OPTS=-XX:PermSize=128M

3)在使用-Xms和-Xmx調(diào)整tomcat的堆大小時,還需要考慮垃圾回收機(jī)制。如果系統(tǒng)花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應(yīng)該不超過3-5 秒。如果垃圾收集成為瓶頸,那么需要指定代的大小,檢查垃圾收集的詳細(xì)輸出,研究垃圾收集參數(shù)對性能的影響。一般說來,你應(yīng)該使用物理內(nèi)存的 80% 作為堆大小。當(dāng)增加處理器時,記得增加內(nèi)存,因為分配可以并行進(jìn)行,而垃圾收集不是并行的。

2、連接數(shù)優(yōu)化:

#優(yōu)化連接數(shù),主要是在conf/server.xml配置文件中進(jìn)行修改。

2.1、優(yōu)化線程數(shù)

找到Connectorport="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount屬性(使acceptCount大于等于maxThreads),如下:

<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

? maxThreads:tomcat可用于請求處理的最大線程數(shù),默認(rèn)是200 ? minSpareThreads:tomcat初始線程數(shù),即最小空閑線程數(shù) ? maxSpareThreads:tomcat最大空閑線程數(shù),超過的會被關(guān)閉 ? acceptCount:當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時,可以放到處理隊列中的請求數(shù),超過這個數(shù)的請求將不予處理.默認(rèn)100 2.2、使用線程池

在server.xml中增加executor節(jié)點,然后配置connector的executor屬性,如下:

<Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/> <Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

其中:

? namePrefix:線程池中線程的命名前綴 ? maxThreads:線程池的最大線程數(shù) ? minSpareThreads:線程池的最小空閑線程數(shù) ? maxIdleTime:超過最小空閑線程數(shù)時,多的線程會等待這個時間長度,然后關(guān)閉 ? threadPriority:線程優(yōu)先級

注:當(dāng)tomcat并發(fā)用戶量大的時候,單個jvm進(jìn)程確實可能打開過多的文件句柄,這時會報java.net.SocketException:Too many open files錯誤。可使用下面步驟檢查:

? ps -ef |grep tomcat 查看tomcat的進(jìn)程ID,記錄ID號,假設(shè)進(jìn)程ID為10001 ? lsof -p 10001|wc -l 查看當(dāng)前進(jìn)程id為10001的 文件操作數(shù) ? 使用命令:ulimit -a 查看每個用戶允許打開的最大文件數(shù) 3、Tomcat Connector三種運行模式(BIO, NIO, APR) 3.1、三種模式比較:

1)BIO:一個線程處理一個請求。缺點:并發(fā)量高時,線程數(shù)較多,浪費資源。Tomcat7或以下在Linux系統(tǒng)中默認(rèn)使用這種方式。

2)NIO:利用Java的異步IO處理,可以通過少量的線程處理大量的請求。Tomcat8在Linux系統(tǒng)中默認(rèn)使用這種方式。Tomcat7必須修改Connector配置來啟動(conf/server.xml配置文件):

<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>

3)APR(Apache Portable Runtime):從操作系統(tǒng)層面解決io阻塞問題。Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。

3.2、apr模式

安裝apr以及tomcat-native

yum -y install apr apr-devel

進(jìn)入tomcat/bin目錄,比如:

cd /opt/local/tomcat/bin/ tar xzfv tomcat-native.tar.gz cd tomcat-native-1.1.32-src/jni/native ./configure --with-apr=/usr/bin/apr-1-config make && make install

#注意最新版本的tomcat自帶tomcat-native.war.gz,不過其版本相對于yum安裝的apr過高,configure的時候會報錯。

解決:yum remove apr apr-devel –y,卸載yum安裝的apr和apr-devel,下載最新版本的apr源碼包,編譯安裝;或者下載低版本的tomcat-native編譯安裝

安裝成功后還需要對tomcat設(shè)置環(huán)境變量,方法是在catalina.sh文件中增加1行:

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

#apr下載地址:http://apr.apache.org/download.cgi

#tomcat-native下載地址:http://tomcat.apache.org/download-native.cgi

修改8080端對應(yīng)的conf/server.xml

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

<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" enableLookups="false" redirectPort="8443" URIEncoding="UTF-8" />

PS:啟動以后查看日志 顯示如下表示開啟 apr 模式

Sep 19, 2016 3:46:21 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-apr-8081"]

總結(jié)

以上是生活随笔為你收集整理的Tomcat配置参数优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。