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