java 記憶體設定 PermGen space等

來源:互聯網
上載者:User


解決辦法如下:

在eclipse.ini設定檔中加上以下兩行 
-XX:PermSize=128M  
-XX:MaxPermSize=128M

加上上2行後,我的eclipse.ini檔案如下所示:

-showsplash 
org.eclipse.platform 
--launcher.XXMaxPermSize 
512m 
-vmargs 
-Xms256m 
-Xmx512m 
-XX:PermSize=128M  
-XX:MaxPermSize=128M

這裡的記憶體大小根據自己的實體記憶體情況來決定吧。

從網上的資料看PermSize大一點肯定更好,而且最好是設定PermSize和MaxPermSize一樣大。理由如下: 
        PermSize 和MaxPermSize如果設定為相同還可以在一定程度上提高效能,因為,PermSize在不斷的變化中會需要轉移其中的資料。如果固定了以後,則可以減少每次擴大PermSize帶來的效能損失。




1、PermGen space簡介

PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存地區OutOfMemoryError: PermGen space從表面上看就是記憶體益出,解決方案也一定是加大記憶體。

說說為什麼會記憶體益出: 
(1)這一部分用於存放Class和Meta的資訊,Class在被 Load的時候被放入PermGen space地區,它和和存放Instance的Heap地區不同。 
(2) GC(Garbage Collection)不會在主程式運行期對PermGen space進行清理,所以如果你的APP會LOAD很多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=64M -XX:MaxPermSize=128m 
建議:將相同的第三方jar檔案移置到tomcat/shared/lib目錄下,這樣可以減少jar 文檔重複佔用記憶體。





java雖然是自動回收記憶體,但是應用程式,尤其伺服器程式最好根據業務情況指明記憶體配置限制。否則可能導致應用程式宕掉。

舉例說明含義:
-Xms128m  
表示JVM Heap(堆記憶體)最小尺寸128MB,初始分配
-Xmx512m  
表示JVM Heap(堆記憶體)最大允許的尺寸256MB,按需分配。

說明:如果-Xmx不指定或者指定偏小,應用可能會導致java.lang.OutOfMemory錯誤,此錯誤來自JVM不是Throwable的,無法用try...catch捕捉。

PermSize和MaxPermSize指明虛擬機器為java永久產生對象(Permanate generation)如,class對象、方法對象這些可反射(reflective)對象分配記憶體限制,這些記憶體不包括在Heap(堆記憶體)區之中。

-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允許分配尺寸,按需分配
過小會導致:java.lang.OutOfMemoryError: PermGen space

MaxPermSize預設值和-server -client選項相關。
-server選項下預設MaxPermSize為64m
-client選項下預設MaxPermSize為32m


經驗:
1、慎用最小限制選項Xms,PermSize已節約系統資源。
這是從以下網址轉過來的: http://hi.baidu.com/haoh/blog/item/2a76267f67177d0228388a80.html









之前的JAVA_OPTS是 -Xms 520m -Xmx 1220m -Xss 15120k +XX:AggressiveHeap
這個JAVA_OPTS犯了2個致命的錯誤:
1. +XX:AggressiveHeap會使得 Xms 1220m沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G實體記憶體,再吃盡一個G的swap。
另外Xmx作為允許jvm使用的最大記憶體數量,不應該超過實體記憶體的90%。
而之所以使用了這個參數,是因為不加的話,JBoss會在運行一天左右的時間後迅速崩潰,上機課是,甚至出現過半個小時就崩潰的情況。
之所以要用這個參數,用swap支援伺服器運行,是因為犯了下面的錯誤:
2. -Xss 15120k 
這使得JBoss每增加一個線程(thread)就會立即消耗15M記憶體,而最佳值應該是128K,預設值好像是512k.
這就是JBoss剛啟動時,還有200Mb記憶體富餘,但會在一個小時內迅速用完,因為伺服器的threads在迅速增加。前3天,每天都多吃80Mb左右的swap.在第四天開始穩定下來。今年春節在外度假,觀察到了這個現象,卻不理解其原因:伺服器線上程到達100之後,一般不再增加新的線程,新增加的在用完之後,會被迅速destroy,?褂玫哪詿嬉不厥樟恕R虼耍旁詿航諂詡洌鄄斕椒衿髟?1.25-2.10所使用的線程基本是1.21-1.23建立的,因此沒有再消耗新的記憶體。伺服器持續已耗用時間,也因此大大超乎我5天的預期,到達了20天。
昨天所作的修改:
1.修改JAVA_OPTS,去掉+XX:AggressiveHeap,修改Xss。現在的JAVA_OPTS為:
-Xms 520m -Xmx 900m -Xss 128k
2.修改deploy/jbossweb-tomcat55.sar/service.xml
將maxThreads根據目前的訪問量由預設的250降為75,並使用jboss 4預設未寫在標準service.xml裡面而jboss 3寫入了的2個參數: maxSparseThreads=55,minSparseThreads=25
3.修改了oracle-ds.xml將最大串連數有150降為50.
4.去掉了一些不用的服務








JVM記憶體JAVA_OPTS參數說明

我經常會這樣來設定伺服器端的JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

-server:一定要作為第一個參數,在多個CPU時效能佳劉兵召寫於2008-12-25 12:40
-Xms:初始Heap大小,使用的最小記憶體,cpu效能高時此值應設的大一些
-Xmx:java heap最大值,使用的最大記憶體劉兵召寫於2008-12-25 12:40
上面兩個值是分配JVM的最小和最大記憶體,取決於硬體實體記憶體的大小,建議均設為實體記憶體的一半。劉兵召寫於2008-12-25 12:40
-XX:PermSize:設定記憶體的永久儲存地區劉兵召寫於2008-12-25 12:40
-XX:MaxPermSize:設定最大記憶體的永久儲存地區劉兵召寫於2008-12-25 12:40
-XX:MaxNewSize:劉兵召寫於2008-12-25 12:40
-Xss 15120 這使得JBoss每增加一個線程(thread)就會立即消耗15M記憶體,而最佳值應該是128K,預設值好像是512k.劉兵召寫於2008-12-25 12:40
+XX:AggressiveHeap 會使得 Xms沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G實體記憶體,再吃盡一個G的swap。劉兵召寫於2008-12-25 12:40
-Xss:每個線程的Stack大小劉兵召寫於2008-12-25 12:40
-verbose:gc 現實垃圾收集資訊劉兵召寫於2008-12-25 12:40
-Xloggc:gc.log 指定垃圾收集記錄檔劉兵召寫於2008-12-25 12:40
-Xmn:young generation的heap大小,一般設定為Xmx的3、4分之一劉兵召寫於2008-12-25 12:40
-XX:+UseParNewGC :縮短minor收集的時間劉兵召寫於2008-12-25 12:40
-XX:+UseConcMarkSweepGC :縮短major收集的時間劉兵召寫於2008-12-25 12:40
提示:此選項在Heap Size 比較大而且Major收集時間較長的情況下使用更合適。








相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.