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