linix系統平臺大並發下tomcat5.5的優化策略(2009-03-1112:45:24)
標簽:linux tomcat5.5優化策略it分類:java
部署系統後,做了壹些工作來提高系統的並發性和響應速度。因此,安排如下。
1.修改server.xml文件
& lt連接器端口="80 "協議="HTTP/1.1 "
maxHttpHeaderSize="8192 "
maxThreads = " 1000 " minSpareThreads = " 75 " maxSpareThreads = " 300 "
enable lookups = " false " redirect port = " 8443 " accept count = " 200 "
connection time out = " 50000 " disableuploadtime out = " true "/& gt;
主要修改了maxThreads和acceptCount。
引用
谷歌數據說,“如果妳想增加並發連接數,妳應該同時增加這兩個參數。web服務器允許的最大連接數也受操作系統內核參數設置的限制,通常Windows為2000左右,Linux為1000。”
2.增加tomcat啟動的初始內存設置;catalina . sh-增加了參數內存設置。
內存為2G:
JAVA _ OPTS = "-server-xms 1500m-xmx 1500m-XSS 256k-DJ ava . awt . headless = true-XX:PermSize = 64M-XX:MaxPermSize = 128m "
(補充:-Dfile.encoding=utf8添加此項以設置文件寫入的編碼方法)
引用
堆大小最多不應超過可用物理內存的80%。通常,應該將-Xms和-Xmx選項設置為相同的值。
堆內存分配
JVM初始分配的內存由-Xms指定,默認為物理內存的1/64;JVM的最大分配內存由-Xmx指定,缺省值是65438+物理內存的0/4。當默認空閑堆內存小於40%時,JVM會將堆增加到最大限制-Xmx;當空閑堆內存超過70%時,JVM會將堆減少到-Xms的最小值。因此,服務器通常將-Xms和-Xmx設置為相等,以避免在每次GC後調整堆的大小。
非堆內存分配
JVM使用-XX:PermSize設置非堆內存的初始值,默認為物理內存的1/64;非堆內存的最大大小由XX:MaxPermSize設置,默認為65438+物理內存的0/4。
JVM內存限制(最大值)
首先,JVM內存受限於實際的最大物理內存。假設物理內存是無限的,最大JVM內存和操作系統有很大的關系。簡單來說,雖然32位處理器的可控內存空間是4GB,但具體操作系統會給出壹個限制,壹般是2GB-3GB(壹般Windows系統是1.5G-2G,Linux系統是2G-3G),但64bit以上的處理器不會有限制。
-Djava.awt.headless=true
Java在圖形處理中使用本地圖形處理庫。使用Java進行圖形處理(比如圖像縮放、圖像簽名、報表生成)時,如果運行在windows上就不會有問題。如果將程序移植到Linux/Unix上,可能會出現圖形無法顯示的錯誤。提示信息:“無法連接x 11窗口服務器”這是因為Linux的圖形處理需要壹個X服務器。解決方法是設置參數。
Xss:每個線程的堆棧大小。堆棧的大小限制了線程的數量。如果堆棧太大,會導致內存溢出。-Xss參數確定堆棧大小,例如,-Xss1024K。如果棧太小,也會導致棧溢出。
Tomcat是如何增加內存的?
轉載修改方法開始
打開bin目錄,找到catalina.bat(windows系統)或者catalina.sh(linux系統),用#在前面壹堆註釋結束後添加如下配置。
窗口:
set CATALINA _ OPTS = "-server-xms 256m-xmx 256m-XX:PermSize = 64M-XX:MaxNewSize = 256m-XX:MaxPermSize = 128m "
Linux:
JAVA _ OPTS = = '-server-xms 256m-xmx 256m-XX:PermSize = 64M-XX:MaxNewSize = 256m-XX:MaxPermSize = 128m '
重印修改方法結束
獎勵:3發布日期:2008年8月-14提問者:rihoonet(初級程序員)
& lt& gt獵頭職位:北京:北京某知名手機網站,招聘高級java程序員。
錯誤:java.lang .內存不足錯誤:java堆空間
TOMCAT版本5.5.23
試過的方法。
/tomcat/bin/catalina.bat添加以下命令:
set Java _ opts =-xms32m-xmx 1024m-啟動不了。。奇怪。
采用的答案
2008-08-14小瘋狂(高級程序員)
Java代碼
set JAVA _ OPTS =-Xms32m-xmx 1024m % JAVA _ OPTS %
set JAVA_OPTS =-xms32m-xmx 1024m % JAVA _ OPTS %,應該引用原JAVA _ OPTS,否則會覆蓋原。
增加Tomcat虛擬內存大小
-
JVM大小設置(unix平臺上的tomcat):調整文件$ catalina _ home \ bin \ catalina.sh。
elif[" $ 1 " = " start "];然後
變化
觸摸" $ CATALINA _ BASE "/logs/CATALINA . out
if[" $ 1 " = "-security "];然後
回顯“使用安全管理器”
變化
" $ _ run JAVA " $ JAVA _ OPTS $ CATALINA _ OPTS \
-DJ ava . approved . dirs = " $ JAVA _ approved _ DIRS "-class path " $ class path " \
-Djava.security.manager \
-DJ ava . security . policy = = " $ CATALINA _ BASE "/conf/CATALINA . policy \
-dcatalina . BASE = " $ CATALINA _ BASE " \
-dcatalina . HOME = " $ CATALINA _ HOME " \
-DJ ava . io . TMPDIR = " $ CATALINA _ TMPDIR " \
org . Apache . catalina . startup . bootstrap " $ @ " start \
& gt& gt" $ CATALINA _ BASE "/logs/CATALINA . out 2 & gt;& amp1。
其他
" $ _ run JAVA " $ JAVA _ OPTS-xms 1024m-xmx 1024m $ CATALINA _ OPTS \
-DJ ava . approved . dirs = " $ JAVA _ approved _ DIRS "-class path " $ class path " \
-dcatalina . BASE = " $ CATALINA _ BASE " \
-dcatalina . HOME = " $ CATALINA _ HOME " \
-DJ ava . io . TMPDIR = " $ CATALINA _ TMPDIR " \
org . Apache . catalina . startup . bootstrap " $ @ " start \
& gt& gt" $ CATALINA _ BASE "/logs/CATALINA . out 2 & gt;& amp1。
船方不負擔裝貨費用
註意紅色部分——-xms 1024m-xmx 1024m+0024m,表示jvm的最小值是1024m,最大值是1024m。這部分的調優需要根據web服務器主機的不同硬件配置進行調整。初始化堆的大小實現了虛擬機在啟動時應用於系統的內存大小。壹般來說,這個參數並不重要。但是,壹些應用程序在高負載下會迅速占用更多內存。這個時候,這個參數就很重要了。如果用於虛擬機啟動的內存相對較小,並且在這種情況下初始化了許多對象,則虛擬機必須重復增加內存以滿足使用。為此,我們壹般將-Xms和-Xmx設置為相同的大小,最大堆大小受系統使用的物理內存的限制。通常,使用大量數據的應用程序將使用持久對象,內存使用量可能會迅速增加。當應用需要的內存超過堆的最大值時,虛擬機會提示內存溢出,導致應用服務崩潰。因此,通常建議將堆的最大值設置為可用內存最大值的80%。
JVM的大小設置(windows平臺上的tomcat):
1)停止當前的Tomcat服務(假設已經啟動)。
net stop "Apache Tomcat 4.1 "
2)卸載Tomcat服務
tomcat.exe-卸載“Apache Tomcat 4.1”
3)重新配置啟動參數。
tomcat.exe-install " Apache Tomcat 4.1 " " % JAVA _ HOME % \ JRE \ bin \ server \ JVM . dll "-DJ ava . class . path = " % CATALINA _ HOME % \ bin \ bootstrap . jar;% JAVA _ HOME % \ lib \ tools . jar "-dcatalina . HOME = " % CATALINA _ HOME % "-Xrs-xmx 512m-xms 512m-start org . Apache . CATALINA . startup . bootstrap-params start-stop org . AP ache . CATALINA . startup . bootstrap-params stop-out " % CATALINA _ HOME % \ logs \ stderr . log "
4)重新啟動服務中的Tomcat服務以完成配置。
紅色部分也是調整jvm大小的地方。調節原理同上。
另外:查看jvm的方法:$ web app \ cache.jsp。需要提醒的是,通過這個頁面,我們可以看到jvm使用的大概大小,通常實際的jvm大小比頁面顯示的要大。
-
秦敏:rem設置JVM內存大小
set JAVA _ OPTS =-xms 800m-xmx 1024m
-
眾所周知,在windows中,當壹個JAVA程序啟動時,JVM會給這個應用程序分配壹個初始內存和壹個最大內存。這個初始內存和最大內存會在壹定程度上影響程序的性能。例如,當應用程序使用最大內存時,JVM應該首先進行垃圾收集,以釋放壹些被占用的內存。
因此,如果要在Tomcat啟動時調整初始內存和最大內存,需要向JVM聲明。壹般JAVA程序在運行時可以通過-Xms -Xmx調整應用程序的初始內存和最大內存:
如:java -Xms64m -Xmx128m a.jar
Tomcat的啟動程序是打包的,不能直接用Java-x...雄貓。*更改內存設置。現在Tomcat正在改變這個設置。
有兩種方法:
1.您需要向環境變量添加兩個屬性,TOMCAT_OPTS,CATALINA_OPTS _ opts。
如set catalina _ opts =-xms 64m-xmx 512m;
Ms最小,mx最大,64m,512m分別指內存容量。
2.修改Catalina.bat文件
在166行下面,每壹行都是“REM execute Java with the applicable properties”。
% _ exec JAVA % % JAVA _ OPTS % % CATALINA _ OPTS % % DEBUG _ OPTS %-DJ ava . approved . dirs = " % JAVA _ approved _ DIRS % "-class path " % class path % "-dcatalina . base = " % CATALINA _ BA Se % "-d CATALINA . home = " % CATALINA _ home % "-DJ ava . io . tmpdir = " % CATALINA _ tmpdir % " % CATALINA _ OPTS %的% main class % % cmd _ line _ args % % action %被替換為-xms64m-。
___________________________________________________________________________________________
Tomcat本身不能直接在電腦上運行,需要依賴壹個基於硬件的操作系統和壹個java虛擬機。您可以根據自己的需要選擇不同的操作系統和相應的JDK版本(只要符合Sun發布的Java規範即可),但我們推薦您使用Sun公司發布的JDK。確保您使用的版本是最新的,因為Sun和其他公司壹直在升級java虛擬機以提高其性能。有報告顯示,JDK1.4與JDK1.3相比,性能提升了近10%到20%。
可以為Java虛擬機設置已用內存,但是如果選擇錯誤,虛擬機不會補償。您可以通過命令行更改虛擬機使用的內存大小。如下表所示,有兩個參數用於設置虛擬機使用的內存大小。
參數
形容
-Xms
JVM初始化堆的大小
-Xmx
JVM堆的最大值
這兩個值的大小壹般根據需要設置。初始化堆的大小實現了虛擬機在啟動時向系統請求的內存大小。壹般來說,這個參數並不重要。但是,壹些應用程序在高負載下會迅速占用更多內存。這個時候,這個參數就很重要了。如果用於虛擬機啟動的內存相對較小,並且在這種情況下初始化了許多對象,則虛擬機必須重復增加內存以滿足使用。為此,我們壹般將-Xms和-Xmx設置為相同的大小,最大堆大小受系統使用的物理內存的限制。通常,使用大量數據的應用程序將使用持久對象,內存使用量可能會迅速增加。當應用需要的內存超過堆的最大值時,虛擬機會提示內存溢出,導致應用服務崩潰。因此,通常建議將堆的最大值設置為可用內存最大值的80%。
Tomcat默認可用內存為128MB,在較大的應用項目中不夠用,需要增加。
在Windows下的/bin/catalina.bat文件和Unix下的/bin/catalina.sh文件之前,添加以下設置:
JAVA_OPTS='-Xms初始化內存大小-Xmx可以使用的最大內存'
這兩個參數的值需要增加。例如:
JAVA _ OPTS = '-xms 256m-xmx 512m '
意味著初始化內存是256MB,可以使用的最大內存是512MB。
另壹個要考慮的是Java提供的垃圾收集機制。虛擬機的堆大小決定了虛擬機收集垃圾的時間和頻率。垃圾收集的可接受速度與應用程序有關,應該通過分析垃圾收集的實際時間和頻率來調整。如果堆很大,完整的垃圾收集會很慢,但是頻率會降低。如果您將堆的大小與內存需求相匹配,那麽完整的收集將會很快,但是會更頻繁。調整堆大小的目的是最大限度地減少垃圾收集的時間,從而在特定時間內最大限度地處理客戶請求。在基準測試中,為了保證最佳的性能,堆的大小應該設置得很大,以保證在整個基準測試過程中不會出現垃圾收集。
如果系統花費大量時間收集垃圾,請減小堆的大小。壹次完整的垃圾收集不應該超過3-5秒。如果垃圾收集成為瓶頸,需要指定代大小,檢查垃圾收集的詳細輸出,研究垃圾收集參數對性能的影響。壹般來說,應該使用80%的物理內存作為堆大小。添加處理器時,記得添加內存,因為分配可以並行完成,但垃圾收集不是並行的。
Tomcat 5的常見優化和配置
1,JDK內存優化:
Tomcat默認可以使用的內存是128 MB。在Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,以下設置被添加到文件{tomcat_home}/bin/catalina.sh之前:
JAVA_OPTS='-Xms[初始化內存大小] -Xmx[可以使用的最大內存]
壹般來說,應該使用80%的物理內存作為堆大小。
2.連接器優化:
在tomcat配置文件server.xml的配置中,與連接數相關的參數有:
最大線程數:
Tomcat使用線程來處理它收到的每個請求。該值表示Tomcat可以創建的最大線程數。默認值為200。
接受計數:
指定當用於處理請求的所有可用線程都被使用時,可以放入處理隊列的請求數。超過此數量的請求將不予處理。默認值是10。
minSpareThreads:
Tomcat初始化期間創建的線程數。默認值為4。
maxSpareThreads:
壹旦創建的線程超過這個值,Tomcat就會關閉不再需要的套接字線程。默認值為50。
啟用查找:
是否反向查詢域名,默認值為真。為了提高處理能力,應該將其設置為false。
連接超時:
網絡連接超時,默認值是60000,以毫秒為單位。設置為0意味著永遠不會超時,這是壹個隱患。通常可以設置為30000毫秒。
maxKeepAliveRequests:
保持請求數,默認值為100。
緩沖區大小:
輸入流緩沖區大小,默認值為2048字節。
壓縮:
壓縮傳輸,值開/關/力,默認值關。
與最大連接數相關的參數是maxThreads和acceptCount。如果要增加並發連接數,應該同時增加這兩個參數。web服務器允許的最大連接數也受到操作系統內核參數設置的限制,Windows通常為2000左右,Linux為1000。
3.如何在tomcat中禁止和允許列目錄中的文件?
在{tomcat_home}/conf/web.xml中,只需將listings參數設置為false,如下所示:
...
清單
錯誤的
...
4.如何在tomcat中禁止和允許主機或IP地址訪問?
...
allow="*.mycompany.com,www . your company . com "/& gt;
deny = " 192.168.1。* "/>;
...
這是我們服務器的配置。具體的文件我給不了妳,因為涉及公司機密,所以給妳,我抄下來了。
JAVA _ OPTS = '-server-xms 512m-xmx 768m-XX:NewSize = 128m-XX:MaxNewSize = 192m-XX:survivor ratio = 8 '