Java JVM內存分析

  • JVM常見參數及溢出分析工具和方法
          JDK1.6.45常用基本參數 
-server 服務模式啓動 
-verbose:gc 開啓gc日誌打印 
-Xms值} 最小堆 
-Xmx{值} 最大堆 
-Xss{值} 棧容量 
-Xmn{值} 新生代的內存空間大小,注意:此處的大小是(eden + 2 survivor space) 
-Xloggc 日誌文件路徑,例如-Xloggc:/var/logs/gc.log 
-XX:+HeapDumpOnOutOfMemoryError 參數表示當JVM發生OOM時,自動生成DUMP文件。 
-XX:HeapDumpPath=${目錄}參數表示生成DUMP文件的路徑,也可以指定文件名稱,例如:XX:HeapDumpPath=${目錄}/java_heapdump.hprof。如果不指定文件名,默認爲:java_<pid>_<date>_<time>_heapDump.hprof。 
-XX:PermSize={值} 方法區最小內存值 
-XX:MaxPermSize={值} 方法區最大內存值 
-XX:MaxDirectMemorySize={值}堆外內存 
-XX:+DisableExplicitGC 禁用顯示GC的System.gc()方法 
-XX:+PrintGC 
-XX:+PrintGCDetails 打印GC收集詳情 
-XX:+PrintGCTimeStamps 
-XX:+PrintFlagsInitial 顯示所有可設置參數及默認值 
-XX:+PrintFlagsFinal 
經驗 
新生代與老年代的默認比值是1:2,佔用整個堆的大小。持久代則是另一塊內存區域,需要單獨設置。在新生代中,Eden與1個Survivor的比值是6:1,新生代:Survivor=8:1 
測試內存溢出 
啓動配置(在eclipse中,則配置VM arguments) 
其中需要注意,c:/tmp目錄必須存在,否則文件名無法生成 
-server -verbose:gc -Xms10m -Xmx10m -Xss128k -Xloggc:C:/tmp/gc.log -XX:PermSize=5m -XX:MaxPermSize=5m -XX:MaxDirectMemorySize=10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/tmp 

分析日誌文件方式,可以使用eclipse的map 也可以使用jvisualvm 進行分析
  • JDK JVM分析工具
          JVM 內存模型:

          
          jstat 使用詳解:

          jstat : Java Visual Machine statistics monitoring tools JVM 的監控工具
          
          Usage: jstat -help|-options
          jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
          
          Option選項 一般使用gcutile查看GC情況
          vmid Java進程號
          interval 間隔時間
          count 打印次數
          
          
          sudo jstat -gcutil 13621 1000 50       每隔一秒輸出一次,一共輸出50次
          sudo jstat -class pid 查看Class的加載數量
          sudo jstat -gccapacity pid 查看 jvm內存三代的使用大小
          jmap -dump:format=b,file=heap.bin <pid> Dump Jvm 快照
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章