jvm OOM 排查

阅读更多

       最近公司的测试环境的Cassandra OOM了,借此机会顺便也回顾一下之前学习的JVM,在这总结一下。本文所指JVM是针对Sun的官方HotSpot VM。

 

首先了解一些基本JVM知识。

1、JVM主要内存结构

     a、堆(heap)

          堆主要分为新生代、老年代、永久代

          新生代:存储java实例对象即数组,即:通过 new 生成的对象首先放入此区域,特殊情况也直接放入老年代

          老年代:通过若干次YGC(新生代进行垃圾回收)以后,仍然活下来的对象会被放入此区域

          永久代:Class的Meta信息以及运行期的常量池

     b、栈(stack)

           主要存放对象的引用以及局部变量等

2、java提供的jvm查看命令

     在jdk的bin目录下面好多Java提供的命令可以直接使用,jvm相关的如下:

     1、jps,类似于linux或unix的ps -ef,用于获取当前JVM的实例进程相关的信息,包括进程号,启动类全名,main方法参数、实例的设置的jvm参数等。

          默认是只列出进程号,启动类SimpleName(就是不含包名)

          可带参数如下:

          -l 列出启动类全名,就是main方法所在的类全名

          -m 列出main方法的参数

          -v  列出启动的设置jvm参数

     2、jmap,用于查看当前堆使用情况

          使用示例:jmap 参数 jvm实例进程号

          常用参数如下:

          -heap 列出当前堆使用情况

          -permstat 列出永久代统计情况,里面包含一个重要的统计,就是当前常量池,包含多少个String,并占多大内存

          -help,列出帮助,显示其他可选的参数

     3、jstat,列出当前GC相关

          使用参数 -help获取更多官方信息

3、jvm的图形化工具排查

     jconsole,visualVM,MemoryAnalyzerTool等

 

待续。。。先下班

 

你可能感兴趣的:(jvm OOM 排查)