eclipse 有啟動(dòng)參數(shù)里設(shè)置jvm大小,因?yàn)閑clipse運(yùn)行時(shí)自己也需要jvm,所以eclipse.ini里設(shè)置的jvm大小不是具體某個(gè)程序運(yùn)行時(shí)所用jvm的大小,這和具體程序運(yùn)行的jvm大小無(wú)關(guān)。
那么怎么才能設(shè)置某個(gè)程序的jvm大小呢(當(dāng)然控制臺(tái)運(yùn)行的話不會(huì)存在這個(gè)問(wèn)題,如:java -Xms256m -Xmx1024m classname,這樣就可以把當(dāng)前程序的jvm大小給設(shè)定)?
因?yàn)閑clipse里默認(rèn)的一個(gè)程序的jvm配置為:-Xms8m -Xmx128m,所以我們的處理耗內(nèi)存比較大時(shí)需要手動(dòng)調(diào)整一下,以便不會(huì)內(nèi)存溢出。具體的設(shè)置方法為:
選中被運(yùn)行的類(lèi),點(diǎn)擊菜單‘run->run...’,選擇(x)=Argument標(biāo)簽頁(yè)下的vm arguments框里輸入 -Xmx512m, 保存運(yùn)行就ok了
二、
在你的TOMCAT->右擊->OPEN->在SERVER OVERVIEW 中General 中 Open launch configurtion 單擊—>選擇Argument 把默認(rèn)設(shè)置去掉,在VM argument 中加一句話 :
-Xms256M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=128M
1、
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域OutOfMemoryError: PermGen space從表面上看就是內(nèi)存益出,解決方法也一定是加大內(nèi)存。說(shuō)說(shuō)為什么會(huì)內(nèi)存益出:這一部分用于存放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í)候。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
2、
在tomcat中redeploy時(shí)出現(xiàn)outofmemory的錯(cuò)誤.
可以有以下幾個(gè)方面的原因:
1,使用了proxool,因?yàn)閜roxool內(nèi)部包含了一個(gè)老版本的cglib.
2, log4j,最好不用,只用common-logging
3, 老版本的cglib,快點(diǎn)更新到最新版。
4,更新到最新的hibernate3.2
3、
這里以tomcat環(huán)境為例,其它WEB服務(wù)器如jboss,weblogic等是同一個(gè)道理。
一、java.lang.OutOfMemoryError: PermGen space
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,
這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,
它和存放類(lèi)實(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=64M -XX:MaxPermSize=128m
建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。
二、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畔ⅰ?/span>
提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。
解決方法:手動(dòng)設(shè)置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:
JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:MaxNewSize=256m”
三、實(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 ”
經(jīng)過(guò)查找資料,先看下JAVA_OPTS參數(shù)表示的意義。
-server:一定要作為第一個(gè)參數(shù),在多個(gè)CPU時(shí)性能佳
-Xms:初始Heap大小,使用的最小內(nèi)存,cpu性能高時(shí)此值應(yīng)設(shè)的大一些
-Xmx:java heap最大值,使用的最大內(nèi)存
上面兩個(gè)值是分配JVM的最小和最大內(nèi)存,取決于硬件物理內(nèi)存的大小,建議均設(shè)為物理內(nèi)存的一半。-XX:PermSize:設(shè)定內(nèi)存的永久保存區(qū)域
-XX:MaxPermSize:設(shè)定最大內(nèi)存的永久保存區(qū)域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增加一個(gè)線程(thread)就會(huì)立即消耗15M內(nèi)存,而最佳值應(yīng)該是128K,默認(rèn)值好像是512k.
+XX:AggressiveHeap 會(huì)使得 Xms沒(méi)有意義。這個(gè)參數(shù)讓jvm忽略Xmx參數(shù),瘋狂地吃完一個(gè)G物理內(nèi)存,再吃盡一個(gè)G的swap。
-Xss:每個(gè)線程的Stack大小
-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)的情況下使用更合適。
穩(wěn)定的開(kāi)發(fā)架構(gòu)環(huán)境下,建議出一份有實(shí)踐、經(jīng)驗(yàn)論證的JAVA_OPTS配置,能夠非常切合實(shí)際的服務(wù)于當(dāng)前開(kāi)發(fā)、測(cè)試的軟件流程。
那么怎么才能設(shè)置某個(gè)程序的jvm大小呢(當(dāng)然控制臺(tái)運(yùn)行的話不會(huì)存在這個(gè)問(wèn)題,如:java -Xms256m -Xmx1024m classname,這樣就可以把當(dāng)前程序的jvm大小給設(shè)定)?
因?yàn)閑clipse里默認(rèn)的一個(gè)程序的jvm配置為:-Xms8m -Xmx128m,所以我們的處理耗內(nèi)存比較大時(shí)需要手動(dòng)調(diào)整一下,以便不會(huì)內(nèi)存溢出。具體的設(shè)置方法為:
選中被運(yùn)行的類(lèi),點(diǎn)擊菜單‘run->run...’,選擇(x)=Argument標(biāo)簽頁(yè)下的vm arguments框里輸入 -Xmx512m, 保存運(yùn)行就ok了
二、
在你的TOMCAT->右擊->OPEN->在SERVER OVERVIEW 中General 中 Open launch configurtion 單擊—>選擇Argument 把默認(rèn)設(shè)置去掉,在VM argument 中加一句話 :
-Xms256M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=128M
1、
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域OutOfMemoryError: PermGen space從表面上看就是內(nèi)存益出,解決方法也一定是加大內(nèi)存。說(shuō)說(shuō)為什么會(huì)內(nèi)存益出:這一部分用于存放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í)候。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
2、
在tomcat中redeploy時(shí)出現(xiàn)outofmemory的錯(cuò)誤.
可以有以下幾個(gè)方面的原因:
1,使用了proxool,因?yàn)閜roxool內(nèi)部包含了一個(gè)老版本的cglib.
2, log4j,最好不用,只用common-logging
3, 老版本的cglib,快點(diǎn)更新到最新版。
4,更新到最新的hibernate3.2
3、
這里以tomcat環(huán)境為例,其它WEB服務(wù)器如jboss,weblogic等是同一個(gè)道理。
一、java.lang.OutOfMemoryError: PermGen space
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,
這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,
它和存放類(lèi)實(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=64M -XX:MaxPermSize=128m
建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。
二、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畔ⅰ?/span>
提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。
解決方法:手動(dòng)設(shè)置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:
JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:MaxNewSize=256m”
三、實(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 ”
經(jīng)過(guò)查找資料,先看下JAVA_OPTS參數(shù)表示的意義。
-server:一定要作為第一個(gè)參數(shù),在多個(gè)CPU時(shí)性能佳
-Xms:初始Heap大小,使用的最小內(nèi)存,cpu性能高時(shí)此值應(yīng)設(shè)的大一些
-Xmx:java heap最大值,使用的最大內(nèi)存
上面兩個(gè)值是分配JVM的最小和最大內(nèi)存,取決于硬件物理內(nèi)存的大小,建議均設(shè)為物理內(nèi)存的一半。-XX:PermSize:設(shè)定內(nèi)存的永久保存區(qū)域
-XX:MaxPermSize:設(shè)定最大內(nèi)存的永久保存區(qū)域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增加一個(gè)線程(thread)就會(huì)立即消耗15M內(nèi)存,而最佳值應(yīng)該是128K,默認(rèn)值好像是512k.
+XX:AggressiveHeap 會(huì)使得 Xms沒(méi)有意義。這個(gè)參數(shù)讓jvm忽略Xmx參數(shù),瘋狂地吃完一個(gè)G物理內(nèi)存,再吃盡一個(gè)G的swap。
-Xss:每個(gè)線程的Stack大小
-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)的情況下使用更合適。
穩(wěn)定的開(kāi)發(fā)架構(gòu)環(huán)境下,建議出一份有實(shí)踐、經(jīng)驗(yàn)論證的JAVA_OPTS配置,能夠非常切合實(shí)際的服務(wù)于當(dāng)前開(kāi)發(fā)、測(cè)試的軟件流程。