JVM內存問題分析

1.GC日誌分析jvm

在JVM啓動時加上一些參數,當JVM出問題時能記下一些當時的狀況。GC的日誌輸出參數以下:工具

-verbose:gc      能夠輔助輸出一些詳細的GC信息性能

-XX:+PrintGCDetails     輸出GC的詳細信息線程

-XX:+PrintGCApplicationStoppedTime      輸出GC形成應用程序暫停的時間日誌

-XX:+PrintGCDateStamps    GC發生的時間信息orm

-XX:+PrintHeapAtGC     在GC先後輸出堆中各個區域的大小
對象

-Xloggc:[file]     將GC信息輸出到單獨的文件中內存


2. 對快照文件分析io

能夠經過 jmap  -dump:format=b,file=[filename] [pid]  來記錄下堆的內存快照,而後利用第三方工具,如mat來分析整個Heap的對象關聯狀況。form

內存耗盡量致使JVM直接垮掉,能夠經過參數:-XX:+HeapDumpOnOutOfMemoryError來配置當內存耗盡時記錄下內存快照,能夠經過-XX:HeapDumpPath 來指定文件的路徑。

3. JVM crash日誌分析

  JVM有時會由於自身的bug而直接垮掉,能夠經過 -XX:ErrorFile=[filepath] 來指定jvm退出時產生日誌文件的路徑

-Xmx5000m     堆的最大size
-Xms5000m     堆的初始大小
-Xmn2000m      年輕代大小

-XX:PermSize=256m    永久區的大小

持久代通常固定大小爲64m,因此增大年輕代後,將會減少年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。

-Xss128k  每一個線程的堆棧大小