當(dāng)前位置:
首頁(yè) >
tomcat 内存配置学习总结
發(fā)布時(shí)間:2025/4/14
25
豆豆
生活随笔
收集整理的這篇文章主要介紹了
tomcat 内存配置学习总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
修改 tomcat 內(nèi)存
http://www.cnblogs.com/quietwalk/archive/2012/11/05/2755199.html在Jetty 的VM參數(shù)中設(shè)置:?
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m?
在tomcat運(yùn)行環(huán)境中設(shè)置:?
window環(huán)境 startup.bat第一行?
SET CATALINA_OPTS= -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m?
linux環(huán)境在catalina.sh?
在?
"if [ $have_tty -eq 1 ]; then"之后增加?
? JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"
1、對(duì)于安裝版的TOMCAT:
進(jìn)入TOMCAT的安裝目錄下的bin目錄,雙擊tomcat6w.exe。點(diǎn)擊Java選項(xiàng)卡,可設(shè)置初始化內(nèi)存,最大內(nèi)存,線程的內(nèi)存大小。
初始化內(nèi)存:如果機(jī)器的內(nèi)存足夠大,可以直接將初始化內(nèi)存設(shè)置為512M,如果機(jī)器內(nèi)存較小可適當(dāng)調(diào)小,對(duì)于運(yùn)行了EJB的應(yīng)用,最好不要低于128M。
最大內(nèi)存:最大內(nèi)存目前設(shè)置為512M.
線程內(nèi)存大小:目前配置為1024KB,這也是JDK5.0后的默認(rèn)配置。
對(duì)于容器下運(yùn)行了多個(gè)WEB應(yīng)用時(shí),盡量將相同的JAR包轉(zhuǎn)移到TOMCAT的lib下,此外還需要在JAVA OPTIONS加上如下配置:
-XX:PermSize=16m
-XX:MaxPermSize=128m
此配置表示JAVA永久保存區(qū)域(即不會(huì)被虛擬機(jī)回收)初始大小為16M,最大為128M。
2、對(duì)于解壓版的TOMCAT:
如果是WINDOWS操作系統(tǒng),修改catalina.bat文件;否則修改catalina.sh文件。只需要在文件的頭部加上"set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k”,數(shù)值分別對(duì)應(yīng)了初始化的最小內(nèi)存,最大內(nèi)存,線程內(nèi)存大小。如果JDK的版本是5.0之后的,線程內(nèi)存可以不用設(shè)置。
3、linux系統(tǒng)下修改方法
在/usr/local/apache-tomcat-5.5.23/bin目錄下的catalina.sh?
添加:JAVA_OPTS=’-Xms512m -Xmx1024m’?
要加“m”說(shuō)明是MB,否則就是KB了,在啟動(dòng)tomcat時(shí)會(huì)報(bào)內(nèi)存不足。?
-Xms:初始值?
-Xmx:最大值?
-Xmn:最小值
對(duì)于容器下運(yùn)行了多個(gè)WEB應(yīng)用時(shí),盡量將相同的JAR包轉(zhuǎn)移到TOMCAT的lib下,此外還需要在JAVA OPTS后加上如下配置:
-XX:PermSize=16m -XX:MaxPermSize=128m
?
即為:JAVA_OPTS=’-Xms256m –Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m’
此配置表示JAVA永久保存區(qū)域(即不會(huì)被虛擬機(jī)回收)初始大小為16M,最大為128M。
修改內(nèi)存后,可啟動(dòng)TOMCAT,輸入http://127.0.0.1:8080,進(jìn)入Status,會(huì)提示輸入登錄的用戶名和密碼,用戶可以在conf/tomcat-user.xml中配置(配置完后需要重啟TOMCAT),
1
<?xmlversion='1.0'encoding='utf-8'?>
2
<tomcat-users>
3
<rolerolename="manager"/>
4
<userusername="tomcat"password="s3cret"roles="manager"/>
5
</tomcat-users>
登錄后即可看到TOMCAT當(dāng)前的空閑內(nèi)存和最大內(nèi)存。
tomcat報(bào)Exception in thread "http-8080-36" java.lang.OutOfMemoryError: PermGen space異常的解決:
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,
這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,
它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)
PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,
這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小
超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。
解決方法: 手動(dòng)設(shè)置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=128m -XX:MaxPermSize=256m”
建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。
========
Tomcat內(nèi)存設(shè)置詳解
http://elf8848.iteye.com/blog/378805Java內(nèi)存溢出詳解
?
一、常見(jiàn)的Java內(nèi)存溢出有以下三種:
?
1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出
JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置JVM Heap的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)不可超過(guò)物理內(nèi)存。
可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap的大小是Young Generation 和Tenured Generaion 之和。
在JVM中如果98%的時(shí)間是用于GC,且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?
解決方法:手動(dòng)設(shè)置JVM Heap(堆)的大小。 ?
?
2. java.lang.OutOfMemoryError: PermGen space ?---- PermGen space溢出。?
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。
為什么會(huì)內(nèi)存溢出,這是由于這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Load的時(shí)候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同,sun的 GC不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的APP會(huì)載入很多CLASS的話,就很可能出現(xiàn)PermGen space溢出。
解決方法: 手動(dòng)設(shè)置MaxPermSize大小
?
3. java.lang.StackOverflowError ? ---- 棧溢出
棧溢出了,JVM依然是采用棧式的虛擬機(jī),這個(gè)和C和Pascal都是一樣的。函數(shù)的調(diào)用過(guò)程都體現(xiàn)在堆棧和退棧上了。
調(diào)用構(gòu)造函數(shù)的 “層”太多了,以致于把棧區(qū)溢出了。
通常來(lái)講,一般棧區(qū)遠(yuǎn)遠(yuǎn)小于堆區(qū)的,因?yàn)楹瘮?shù)調(diào)用過(guò)程往往不會(huì)多于上千層,而即便每個(gè)函數(shù)調(diào)用需要 1K的空間(這個(gè)大約相當(dāng)于在一個(gè)C函數(shù)內(nèi)聲明了256個(gè)int類型的變量),那么棧區(qū)也不過(guò)是需要1MB的空間。通常棧的大小是1-2MB的。
通常遞歸也不要遞歸的層次過(guò)多,很容易溢出。
解決方法:修改程序。
?
?
二、解決方法
?
在生產(chǎn)環(huán)境中tomcat內(nèi)存設(shè)置不好很容易出現(xiàn)jvm內(nèi)存溢出。
?
1、 linux下的tomcat: ?
修改TOMCAT_HOME/bin/catalina.sh?
位置cygwin=false前。
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"?
?
2、 如果tomcat 5 注冊(cè)成了windows服務(wù),以services方式啟動(dòng)的,則需要修改注冊(cè)表中的相應(yīng)鍵值。
修改注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\Java,右側(cè)的Options
原值為
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms256m -Xmx512m?
重起tomcat服務(wù),設(shè)置生效
?
3、如果tomcat 6 注冊(cè)成了windows服務(wù),或者windows2003下用tomcat的安裝版,
在/bin/tomcat6w.exe里修改就可以了 。
?
4、 如果要在myeclipse中啟動(dòng)tomcat,上述的修改就不起作用了,可如下設(shè)置:
Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的
Optional Java VM arguments中添加:-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m
?
三、jvm參數(shù)說(shuō)明:
?
-server:一定要作為第一個(gè)參數(shù),在多個(gè)CPU時(shí)性能佳?
-Xms:java Heap初始大小。 默認(rèn)是物理內(nèi)存的1/64。
-Xmx:java heap最大值。建議均設(shè)為物理內(nèi)存的一半。不可超過(guò)物理內(nèi)存。
?
-XX:PermSize:設(shè)定內(nèi)存的永久保存區(qū)初始大小,缺省值為64M。(我用visualvm.exe查看的)
-XX:MaxPermSize:設(shè)定內(nèi)存的永久保存區(qū)最大 大小,缺省值為64M。(我用visualvm.exe查看的)
?
-XX:SurvivorRatio=2 ?:生還者池的大小,默認(rèn)是2,如果垃圾回收變成了瓶頸,您可以嘗試定制生成池設(shè)置
?
-XX:NewSize: 新生成的池的初始大小。 缺省值為2M。
-XX:MaxNewSize: 新生成的池的最大大小。 ? 缺省值為32M。
如果 JVM 的堆大小大于 1GB,則應(yīng)該使用值:-XX:newSize=640m -XX:MaxNewSize=640m -XX:SurvivorRatio=16,或者將堆的總大小的 50% 到 60% 分配給新生成的池。調(diào)大新對(duì)象區(qū),減少Full GC次數(shù)。
?
+XX:AggressiveHeap 會(huì)使得 Xms沒(méi)有意義。這個(gè)參數(shù)讓jvm忽略Xmx參數(shù),瘋狂地吃完一個(gè)G物理內(nèi)存,再吃盡一個(gè)G的swap。?
-Xss:每個(gè)線程的Stack大小,“-Xss 15120” 這使得JBoss每增加一個(gè)線程(thread)就會(huì)立即消耗15M內(nèi)存,而最佳值應(yīng)該是128K,默認(rèn)值好像是512k.?
-verbose:gc 現(xiàn)實(shí)垃圾收集信息?
-Xloggc:gc.log 指定垃圾收集日志文件?
-Xmn:young generation的heap大小,一般設(shè)置為Xmx的3、4分之一?
-XX:+UseParNewGC :縮短minor收集的時(shí)間?
-XX:+UseConcMarkSweepGC :縮短major收集的時(shí)間 此選項(xiàng)在Heap Size 比較大而且Major收集時(shí)間較長(zhǎng)的情況下使用更合適。
-XX:userParNewGC 可用來(lái)設(shè)置并行收集【多CPU】
-XX:ParallelGCThreads 可用來(lái)增加并行度【多CPU】
-XX:UseParallelGC 設(shè)置后可以使用并行清除收集器【多CPU】
?
========
TOMCAT內(nèi)存溢出及大小調(diào)整
http://blog.csdn.net/happyitlife/article/details/7291182/一、
tomcat內(nèi)存設(shè)置問(wèn)題
? ? 在使用Java程序從數(shù)據(jù)庫(kù)中查詢大量的數(shù)據(jù)或是應(yīng)用服務(wù)器(如tomcat、jboss,weblogic)加載jar包時(shí)會(huì)出現(xiàn)java.lang.OutOfMemoryError異常。這主要是由于應(yīng)用服務(wù)器的內(nèi)存不足引起的。這種異常常有以下幾種情況(以下以tomcat環(huán)境為例,其它WEB服務(wù)器如jboss,weblogic等是同一個(gè)道理):
? ? 1. ?java.lang.OutOfMemoryError: PermGen space
? ? ? ? PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域OutOfMemoryError: PermGen space。從文字上看就是內(nèi)存溢出,解決方法是加大內(nèi)存。為什么會(huì)內(nèi)存溢出,這是由于這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Load的時(shí)候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的APP會(huì)LOAD很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤。這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。
? ? ? ? 解決方法: 手動(dòng)設(shè)置MaxPermSize大小
? ? ? ? a.如果tomcat是以bat方式啟動(dòng)的,則如下設(shè)置:
? ? ? ? 修改TOMCAT_HOME/bin/catalina.sh
? ? ? ? 在“echo "Using CATALINA_BASE: ? ?$CATALINA_BASE"”上面加入以下行:
? ? ? ? JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
? ? ? ? b.如果tomcat是注冊(cè)成了windows服務(wù),以services方式啟動(dòng)的,則需要修改注冊(cè)表中的相應(yīng)鍵值。
? ? ? ? ? ? 打開(kāi)注冊(cè)表,找到目錄HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java,其中目錄地址中紅色標(biāo)注的(如htfty)需要根據(jù)不同情況作修改,為tomcat服務(wù)注冊(cè)成windows服務(wù)的名稱。 可以看到JvmMs和JvmMx項(xiàng),其中JvmMs設(shè)置最小的內(nèi)存使用參數(shù),JvmMx設(shè)置最大的內(nèi)存使用參數(shù)。設(shè)置好JvmMs和JvmMx項(xiàng)的值,重啟tomcat服務(wù)器即可生效。
? ? 建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。
? ? ?2. ?java.lang.OutOfMemoryError: Java heap space
? ? ? ? ? ?JVM堆的設(shè)置是指java程序運(yùn)行過(guò)程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置。JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。在JVM中如果98%的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?
? ? 解決方法:手動(dòng)設(shè)置Heap size
? ? a.如果tomcat是以bat方式啟動(dòng)的,則如下設(shè)置:
? ? 修改TOMCAT_HOME/bin/catalina.sh
? ? 在“echo "Using CATALINA_BASE: ? ?$CATALINA_BASE"”上面加入以下行:
? ? JAVA_OPTS="-server -Xms800m -Xmx800m ? ?-XX:MaxNewSize=256m"
? ? b.如果tomcat是注冊(cè)成了windows服務(wù),以services方式啟動(dòng)的,則需要修改注冊(cè)表中的相應(yīng)鍵值。
? ? ? ? ? ? 打開(kāi)注冊(cè)表,找到目錄HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java,其中目錄地址中紅色標(biāo)注的(如htfty)需要根據(jù)不同情況作修改,為tomcat服務(wù)注冊(cè)成windows服務(wù)的名稱。 可以看到JvmMs和JvmMx項(xiàng),其中JvmMs設(shè)置最小的內(nèi)存使用參數(shù),JvmMx設(shè)置最大的內(nèi)存使用參數(shù)。設(shè)置好JvmMs和JvmMx項(xiàng)的值,重啟tomcat服務(wù)器即可生效。
提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。
二、Tomcat本身不能直接在計(jì)算機(jī)上運(yùn)行,需要依賴于硬件基礎(chǔ)之上的操作系統(tǒng)和一個(gè)java虛擬機(jī)。JAVA程序啟動(dòng)時(shí)JVM都會(huì)分配一個(gè)初始內(nèi)存和最大內(nèi)存給這個(gè)應(yīng)用程序。這個(gè)初始內(nèi)存和最大內(nèi)存在一定程度都會(huì)影響程序的性能。比如說(shuō)在應(yīng)用程序用到最大內(nèi)存的時(shí)候,JVM是要先去做垃圾回收的動(dòng)作,釋放被占用的一些內(nèi)存。所以想調(diào)整Tomcat的啟動(dòng)時(shí)初始內(nèi)存和最大內(nèi)存就需要向JVM聲明,一般的JAVA程序在運(yùn)行都可以通過(guò)中-Xms -Xmx來(lái)調(diào)整應(yīng)用程序的初始內(nèi)存和最大內(nèi)存: 這兩個(gè)值的大小一般根據(jù)需要進(jìn)行設(shè)置。初始化堆的大小執(zhí)行了虛擬機(jī)在啟動(dòng)時(shí)向系統(tǒng)申請(qǐng)的內(nèi)存的大小。一般而言,這個(gè)參數(shù)不重要。但是有的應(yīng)用程序在大負(fù)載的情況下會(huì)急劇地占用更多的內(nèi)存,此時(shí)這個(gè)參數(shù)就是顯得非常重要,如果虛擬機(jī)啟動(dòng)時(shí)設(shè)置使用的內(nèi)存比較小而在這種情況下有許多對(duì)象進(jìn)行初始化,虛擬機(jī)就必須重復(fù)地增加內(nèi)存來(lái)滿足使用。由于這種原因,我們一般把-Xms和-Xmx設(shè)為一樣大,而堆的最大值受限于系統(tǒng)使用的物理內(nèi)存。一般使用數(shù)據(jù)量較大的應(yīng)用程序會(huì)使用持久對(duì)象,內(nèi)存使用有可能迅速地增長(zhǎng)。當(dāng)應(yīng)用程序需要的內(nèi)存超出堆的最大值時(shí)虛擬機(jī)就會(huì)提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)崩潰。因此一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的80%。
? ? ?Tomcat默認(rèn)可以使用的內(nèi)存為128MB,在較大型的應(yīng)用項(xiàng)目中,這點(diǎn)內(nèi)存是不夠的,需要調(diào)大。有以下幾種方法可以選用:
第一種方法:
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設(shè)置:
JAVA_OPTS='-Xms【初始化內(nèi)存大小】 -Xmx【可以使用的最大內(nèi)存】'
需要把這個(gè)兩個(gè)參數(shù)值調(diào)大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化內(nèi)存為256MB,可以使用的最大內(nèi)存為512MB。
第二種方法: 環(huán)境變量中設(shè) ? ? 變量名:JAVA_OPTS ? ? 變量值:-Xms512m ? -Xmx512m
第三種方法:前兩種方法針對(duì)的是bin目錄下有catalina.bat的情況(比如直接解壓的Tomcat等),但是有些安裝版的Tomcat下沒(méi)有catalina.bat,這個(gè)時(shí)候可以采用如下方法,當(dāng)然這個(gè)方法也是最通用的方法:打開(kāi)tomcatHome/\bin/\tomcat5w.exe,點(diǎn)擊Java選項(xiàng)卡,然后將會(huì)發(fā)現(xiàn)其中有這么兩項(xiàng):Initial memory pool和Maximum memory pool.Initial memory pool這個(gè)就是初始化設(shè)置的內(nèi)存的大小。Maximum memory pool這個(gè)是最大內(nèi)存的大小 設(shè)置完了就按確定然后再重啟TOMCAT你就會(huì)發(fā)現(xiàn)tomcat中jvm可用的內(nèi)存改變了
另外需要考慮的是Java提供的垃圾回收機(jī)制。虛擬機(jī)的堆大小決定了虛擬機(jī)花費(fèi)在收集垃圾上的時(shí)間和頻度。收集垃圾可以接受的速度與應(yīng)用有關(guān),應(yīng)該通過(guò)分析實(shí)際的垃圾收集的時(shí)間和頻率來(lái)調(diào)整。如果堆的大小很大,那么完全垃圾收集就會(huì)很慢,但是頻度會(huì)降低。如果你把堆的大小和內(nèi)存的需要一致,完全收集就很快,但是會(huì)更加頻繁。調(diào)整堆大小的的目的是最小化垃圾收集的時(shí)間,以在特定的時(shí)間內(nèi)最大化處理客戶的請(qǐng)求。在基準(zhǔn)測(cè)試的時(shí)候,為保證最好的性能,要把堆的大小設(shè)大,保證垃圾收集不在整個(gè)基準(zhǔn)測(cè)試的過(guò)程中出現(xiàn)。 ? ?如果系統(tǒng)花費(fèi)很多的時(shí)間收集垃圾,請(qǐng)減小堆大小。一次完全的垃圾收集應(yīng)該不超過(guò) 3-5 秒。如果垃圾收集成為瓶頸,那么需要指定代的大小,檢查垃圾收集的詳細(xì)輸出,研究 垃圾收集參數(shù)對(duì)性能的影響。一般說(shuō)來(lái),你應(yīng)該使用物理內(nèi)存的 80% 作為堆大小。當(dāng)增加處理器時(shí),記得增加內(nèi)存,因?yàn)榉峙淇梢圆⑿羞M(jìn)行,而垃圾收集不是并行的。
一個(gè)要注意的地方:建議把內(nèi)存的最高值跟最低值的差值縮小,不然會(huì)浪費(fèi)很多內(nèi)存的, 最低值加大 ,最高值可以隨便設(shè),但是要根據(jù)實(shí)際的物理內(nèi)存 ,如果內(nèi)存設(shè)置太大了,比如設(shè)置了512M最大內(nèi)存,但如果沒(méi)有512M可用內(nèi)存,Tomcat就不能啟動(dòng),還有可能存在內(nèi)存被系統(tǒng)回收,終止進(jìn)程的情況
========
如何修改和查看tomcat內(nèi)存大小
http://www.blogjava.net/Steven-bot/archive/2011/10/08/360156.html為了解決tomcat在大進(jìn)行大并發(fā)請(qǐng)求時(shí),出現(xiàn)內(nèi)存溢出的問(wèn)題,請(qǐng)修改tomcat的內(nèi)存大小,其中分為以下兩種方式:
一、使用 catalina.bat 等命令行方式運(yùn)行的 tomcat
查看系統(tǒng)最大支持內(nèi)存命令:java -Xmx1024m -version
1、修改 tomcat\bin\Catalina.bat 文件
windows環(huán)境下:
在166行左右
rem Execute Java with the applicable properties ”以下每行
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
在 %DEBUG_OPTS% 后面添加-Xms256m -Xmx512m
linux環(huán)境下:
打開(kāi)在Tomcat的安裝目錄的bin文件的catalina.sh文件,進(jìn)入編輯狀態(tài).
在注釋后面加上如下腳本:
JAVA_OPTS='-Xms512m -Xmx1024m'
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"
其中 JAVA_OPTS='-Xms512m -Xmx1024m' 是設(shè)置Tomcat使用的內(nèi)存的大小.
-XX:PermSize=64M -XX:MaxPermSize=256m 指定類空間(用于加載類)的內(nèi)存大小?
保存后,重新以命令行的方式運(yùn)行 tomcat ,即可,然后通過(guò)最后面介紹的如何觀察tomcat現(xiàn)有內(nèi)存情況的方法進(jìn)行查看是否已經(jīng)變更成功。
二、使用 系統(tǒng)中的 “服務(wù)”,或者開(kāi)始菜單的可執(zhí)行程序運(yùn)行的tomcat
1、關(guān)閉 現(xiàn)在正在運(yùn)行的tomcat
2.1 [注意]
[高版本tomcat配置方法]
如果是tomcat 5.5 或者是 5.0.28 之后的版本,在 Java 選項(xiàng)卡中,下方,會(huì)有
Inital memory Pool: ??
Maximum memory Pool:
Thread stack size:
三個(gè)輸入框,在這里即可不用做上面的操作,直接配置內(nèi)存大小,只需要設(shè)置
Inital memory Pool 為 256
Maximum memory Pool 為 512
點(diǎn)擊確定后,重啟tomcat 生效
?
如果您是低版本的tomcat,發(fā)現(xiàn)沒(méi)有上面那幾個(gè)錄入框,請(qǐng)看下面的操作步驟
[低版本tomcat配置方法]
在開(kāi)始菜單中,找到“Apache Tomcat 5.0”,并選擇“Configure Tomcat”,在彈出的對(duì)話框窗口中,切換到 Java VM 選項(xiàng)卡,并在 Java Options 輸入框的最前面輸入
-Xms256m -Xmx512m
即輸入框中的內(nèi)容會(huì)像下面的代碼(與自己的環(huán)境有所區(qū)別)
-Xms256m -Xmx512m
-Dcatalina.home="C:\tomcat5"
-Djava.endorsed.dirs="C:\tomcat5\common\endorsed"
-Xrs
設(shè)置完后,點(diǎn)擊“確定”,并重啟tomcat即可。
三、查看現(xiàn)有tomcat的內(nèi)存大小情況
1、啟動(dòng)tomcat
2、訪問(wèn) http://localhost:8080/manager/status ,并輸入您在安裝tomcat時(shí)輸入的用戶與口令,如 admin ,密碼 admin(密碼是您在tomcat安裝時(shí)輸入的)
注:添加用戶,修改conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
? <role rolename="tomcat"/>
? <role rolename="role1"/>
? <role rolename="manager"/>
? <role rolename="admin"/>
? <user username="tomcat" password="tomcat" roles="tomcat"/>
? <user username="both" password="tomcat" roles="tomcat,role1"/>
? <user username="role1" password="tomcat" roles="role1"/>
? <user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>
3、進(jìn)入了Server Status頁(yè)面,可以在JVM表格中看到?
Free memory: 241.80 MB Total memory: 254.06 MB Max memory: 508.06 MB
上面的文字即代表了,當(dāng)前空閑內(nèi)存、當(dāng)前總內(nèi)存、最大可使用內(nèi)存三個(gè)數(shù)據(jù)。
確定了最大內(nèi)存足夠大時(shí),tomcat即可正常運(yùn)轉(zhuǎn)
========
如何更改tomcat7及以上版本內(nèi)存設(shè)置
http://jingyan.baidu.com/article/295430f1c22a940c7e0050fb.html當(dāng)在tomcat的webapps文件夾中部署需要大量資源的war包時(shí),啟動(dòng)tomcat,war包將不能被成功部署。
tomcat安裝有services版安裝和開(kāi)發(fā)版安裝。
本經(jīng)驗(yàn)將介紹如何設(shè)置兩種版本的tomcat需要使用的內(nèi)存和perm 大小。
工具/原料
能夠打開(kāi)bat文件或者sh文件的編輯器
安裝tomcat
Services版本tomcat 內(nèi)存和perm 設(shè)置
1
進(jìn)入 {tomcat 安裝目錄}\bin 目錄下,i.e,C:\Tomcat 8.0\bin。 Services版本安裝下會(huì)有名字類似于Tomcat8w.exe 的文件。如圖所示:
2
如何設(shè)置使用內(nèi)存:
1. 雙擊tomcat8w.exe, Apache tomcat8 屬性框?qū)⒋蜷_(kāi),選中Java tab。
2. 在初始化內(nèi)存池和最大內(nèi)存池中可以設(shè)置tomcat8所需要的內(nèi)存。
本圖設(shè)置的值分別是512MB和1024MB。用戶根據(jù)自己的需求進(jìn)行設(shè)置。
3
如何設(shè)置PermSize:
1. 雙擊tomcat8w.exe, Apache tomcat8 屬性框?qū)⒋蜷_(kāi),選中Java tab。
2. 在Java Options框中輸入,如下格式的參數(shù)(數(shù)值大小根據(jù)需要設(shè)置,格式可以復(fù)制本經(jīng)驗(yàn)格式)
-XX:PermSize=256M-XX:MaxPermSize=1024M
開(kāi)發(fā)版tomcat內(nèi)存和perm size設(shè)置
1
進(jìn)入 {tomcat 安裝目錄}\bin 目錄下,i.e,C:\Tomcat 8.0\bin, 目錄下會(huì)有catalina.bat文件和catalina.sh文件。 windows用戶用編輯器打開(kāi)catalina.bat, Linux用戶用編輯器打開(kāi)catalina.sh文件。
2
在Catalina.bat文件中找到如下行 所在的位置:
:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
3
設(shè)置內(nèi)存參數(shù):
在:noJuliConfig下面設(shè)置如下格式的參數(shù):(數(shù)值可以更改,格式不能更改)
JAVA_OPTS='-Xms512m -Xmx1024m'
4
設(shè)置PermSize:
在:noJuliConfig下面設(shè)置如下格式的參數(shù):(數(shù)值可以更改,格式不能更改)
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"
注意事項(xiàng)
格式安裝經(jīng)驗(yàn)中的格式書(shū)寫(xiě),不能擅自加入空格,否則設(shè)置可能會(huì)失效。
參數(shù)值大小根據(jù)實(shí)際需求設(shè)置,設(shè)置過(guò)小,web應(yīng)用將不能成功部署。
經(jīng)驗(yàn)內(nèi)容僅供參考,如果您需解決具體問(wèn)題(尤其法律、醫(yī)學(xué)等領(lǐng)域),建議您詳細(xì)咨詢相關(guān)領(lǐng)域
========
內(nèi)存溢出之Tomcat內(nèi)存配置?
設(shè)置Tomcat啟動(dòng)的初始內(nèi)存其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。
?
可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置
?
三、實(shí)例,以下給出1G內(nèi)存環(huán)境下java jvm 的參數(shù)設(shè)置參考:?
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
?
JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: NewSize=192m -XX:MaxNewSize=384m"?
CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m"
?
Linux:?
在/usr/local/apache-tomcat-5.5.23/bin 目錄下的catalina.sh添加:?
JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”說(shuō)明是MB,否則就是KB了,在啟動(dòng)tomcat時(shí)會(huì) 報(bào)內(nèi)存不足。?
-Xms:初始值-Xmx:最大值-Xmn:最小值?
Windows
在catalina.bat最前面加入set JAVA_OPTS=-Xms128m -Xmx350m ?
如果用startup.bat啟動(dòng)tomcat,OK設(shè)置生效.夠成功的分配200M內(nèi)存.?
但是如果不是執(zhí)行startup.bat啟動(dòng)tomcat而是利用windows的系統(tǒng)服務(wù)啟動(dòng)tomcat服務(wù),上面的設(shè)置就不生效了,就是說(shuō)set JAVA_OPTS=-Xms128m -Xmx350m 沒(méi)起作用.上面分配200M內(nèi)存就OOM了..
?
windows服務(wù)執(zhí)行的是bin\tomcat.exe.他讀取注冊(cè)表中的值,而不是catalina.bat的設(shè)置.
?
解決辦法:
修改注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
?
原值為-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"-Xrs加入 -Xms300m -Xmx350m?
?
重起tomcat服務(wù),設(shè)置生效
?
?答案2Tomcat 的JVM 內(nèi)存溢出問(wèn)題的解決關(guān)鍵字: tomcat 的jvm 內(nèi)存溢出問(wèn)題的解決?
?
最近在熟悉一個(gè)開(kāi)發(fā)了有幾年的項(xiàng)目,需要把數(shù)據(jù)庫(kù)從mysql移植到oracle,首先把jdbc的連接指向mysql,打包放到tomcat里面,可以跑起來(lái),沒(méi)有問(wèn)題,可是當(dāng)把jdbc連接指向oracle的時(shí)候,tomcat就連續(xù)拋java.lang.OutOfMemoryError的錯(cuò)誤,上網(wǎng)google了一下,了解了一下tomcat的運(yùn)行機(jī)制,也解決了問(wèn)題,share出來(lái),以備查。?
?
1、首先是:java.lang.OutOfMemoryError: Java heap space 解釋: Heap size 設(shè)置 JVM堆的設(shè)置是指java程序運(yùn)行過(guò)程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。?
?
提示:在JVM中如果98%的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?
?
提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。?
?
解決方法: 手動(dòng)設(shè)置Heap size 修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: Java代碼 set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m 或修改catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"?
?
2、其次是:java.lang.OutOfMemoryError: PermGen space 原因: PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。?
?
解決方法: 1. 手動(dòng)設(shè)置MaxPermSize大小 修改TOMCAT_HOME/bin/catalina.bat(Linux下為catalina.sh),在Java代碼 “echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m “echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m catalina.sh下為: Java代碼 JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m" JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"?
?
另外看到了另外一個(gè)帖子,覺(jué)得挺好,摘抄如下:?
?
分析java.lang.OutOfMemoryError: PermGen space 發(fā)現(xiàn)很多人把問(wèn)題歸因于: spring,hibernate,tomcat,因?yàn)樗麄儎?dòng)態(tài)產(chǎn)生類,導(dǎo)致JVM中的permanent heap溢出 。然后解決方法眾說(shuō)紛紜,有人說(shuō)升級(jí) tomcat版本到最新甚至干脆不用tomcat。還有人懷疑spring的問(wèn)題,在spring論壇上討論很激烈,因?yàn)閟pring在AOP時(shí)使用CBLIB會(huì)動(dòng)態(tài)產(chǎn)生很多類。 但問(wèn)題是為什么這些王牌的開(kāi)源會(huì)出現(xiàn)同一個(gè)問(wèn)題呢,那么是不是更基礎(chǔ)的原因呢?tomcat在Q&A很隱晦的回答了這一點(diǎn),我們知道這個(gè)問(wèn)題,但這個(gè)問(wèn)題是由一個(gè)更基礎(chǔ)的問(wèn)題產(chǎn)生。 于是有人對(duì)更基礎(chǔ)的JVM做了檢查,發(fā)現(xiàn)了問(wèn)題的關(guān)鍵。原來(lái)SUN 的JVM把內(nèi)存分了不同的區(qū),其中一個(gè)就是permenter區(qū)用來(lái)存放用得非常多的類和類描述。本來(lái)SUN設(shè)計(jì)的時(shí)候認(rèn)為這個(gè)區(qū)域在JVM啟動(dòng)的時(shí)候就固定了,但他沒(méi)有想到現(xiàn)在動(dòng)態(tài)會(huì)用得這么廣泛。而且這個(gè)區(qū)域有特殊的垃圾收回機(jī)制,現(xiàn)在的問(wèn)題是動(dòng)態(tài)加載類到這個(gè)區(qū)域后,gc根本沒(méi)辦法回收!
?
?對(duì)于以上兩個(gè)問(wèn)題,我的處理是:?
?
在catalina.bat的第一行增加:?
?
Java代碼 :set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m ?
?
在catalina.sh的第一行增加:?
?
Java代碼 :JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
========
總結(jié)
以上是生活随笔為你收集整理的tomcat 内存配置学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解锁bios学习总结
- 下一篇: java单元测试总结