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 快照
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章