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 快照