主要是因為出現了 java.lang.OutOfMemoryError: Java heap space
JDK6以後附了 Java VisualVM (jvisualvm.exe) 在bin的目錄內, 這裡有詳細說明;
1.Overview
先把你要檢查的Java執行起來, 然後打開jvisualvm(如圖), 在左邊Applications內點選你的JVM(我是用OC4J), 就可以在Overview看到JVM的運作環境及設定的參數.
因為要測heap , 你會發現上圖我有加了一些參數, 這裡說明一下:
-XX:+HeapDumpOnOutOfMemoryError 在出現 OutOfMemoryError 時會產生一個 hprof的檔案(e.g. java_pidxxxxx.hprof, 預設會寫在JVM所在路徑, 也可以加 -XX:HeapDumpPath=yourpath ), 方便我們檢查記憶體使用的情況; 使用方法請看這裡 .
hprof 檔可以用 Eclipse memory analyzer (mat, http://www.eclipse.org/mat/ ) 打開來看, 建議載 Stand-alone Eclipse RCP Applications 的版本比較方便(如圖)
-Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m 這幾個參數相信大家都很熟悉, 我就不多說了; 只是 Permanent Size 本來大家都說很小(只要64m), 可是經過 jVisualVM測過, 我發現我的 AP 一下就超過了, 所以我把它改為 128m 起跳; heap size 也把它加到 512m.
2.切換到Monitor還有圖(chart)
接下來就是觀察記憶體使用情形, 然後跟著調整及修正了.
參考自 http://javarevisited.blogspot.sg/2011/09/javalangoutofmemoryerror-permgen-space.html
沒有留言:
張貼留言