JVM常見參數及溢出分析工具和方法html
JDK1.6.45經常使用基本參數 java
-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分析工具eclipse
JVM 內存模型:jvm
http://www.chinasb.org/archives/2011/09/3775.shtml工具
jstat 使用詳解:測試
http://blog.lifangeye.info/2010-11-24/jstat-usage/spa
jstat : Java Visual Machine statistics monitoring tools JVM 的監控工具日誌
Usage: jstat -help|-optionsorm
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]server
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 快照