少年阿賓

          那些青春的歲月

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
           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è)試的軟件流程。
            
          posted on 2012-11-13 14:14 abin 閱讀(23446) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): eclipse

          Feedback

          # re: eclipse java.lang.OutOfMemoryError: Java heap space 2014-11-17 14:53 我是小明
          解決問(wèn)題了。。非常感謝  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 丹凤县| 上犹县| 宾阳县| 上杭县| 三亚市| 彭州市| 遂溪县| 桐乡市| 沧州市| 南澳县| 霍林郭勒市| 曲阜市| 通州市| 江永县| 榆社县| 额敏县| 霍林郭勒市| 布尔津县| 阿巴嘎旗| 绍兴县| 江西省| 上思县| 辰溪县| 沐川县| 长寿区| 宕昌县| 凌云县| 汉源县| 湖北省| 安顺市| 永安市| 新野县| 静安区| 千阳县| 咸丰县| 平乡县| 禹州市| 轮台县| 饶河县| 城固县| 襄汾县|