• 1. JVM状态监控与OOM案例分析beiyu95
  • 2. 主要内容Java内存结构JVM状态监控OOM案例From Jconsole to visualvm
  • 3. Jvm architecture specification
  • 4. Java process heapOS Memory(RAM)Java Process Heap(java/java.exe)Java Object Heap其他内存结构…
  • 5. Java Object HeapJava Object Heap(-Xmx/Xms)Young Generation (good size is 33% of total heap)Old generation
  • 6. Java process heap(其他内存结构)Java process heap(everything else)Permanent SpaceCode GenerationSocket BuffersThread StacksDirect Memory SpaceJNI CodeGarbage CollectionJNI Allocated Memory(*)
  • 7. JVM监控JMX接口配置 Jcosole Jvisualvm 其他JDK自带工具
  • 8. JMX接口配置在虚拟机启动参数中增加 set CATALINA_OPTS="-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=%my.jmx.port% \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false"
  • 9. Jconsole 能做什么Jvm summary信息 Memory状态监控 Threads状态监控 Classes状态监控 VM摘要 Mbeans监控与操作 插件扩展的支持
  • 10. Jconsole
  • 11. OOM案例分析为什么会有OOM OOM都在哪里发生
  • 12. 内存溢出(OOM)对象的引用没有被释放 JVM内存溢出 主要是压力过大时,内存来不及回收,内存使用量达到虚拟机限制 经常是由于不合理的内存使用或者应用服务器配置不当引起 Java进程调用操作系统级资源没有释放 JNI调用等Native方法相关
  • 13. 案例:堆溢出320用户在线,执行事务,TOMCAT内存溢出
  • 14. 案例:OutOfMemoryError: PermGen space原因:这部分用来存放class和Meta信息Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。 解决办法:在JAVA虚拟机启动参数中将-XX:MaxPermSize=256M的值设置到足够大(如256)
  • 15. 案例:Native内存泄露MCPACK内存泄露(JNI allocated memory)内存资源被持续消耗,直至全部耗光,swap分区开始使用 CPU 资源在某一点突然上升,且为系统时间占用 Jvm 内存回收正常
  • 16. 案例:Native 内存泄露(2)堆内存使用正常
  • 17. From Jconsole toVisualvmJdk6u7之后新增visualvm,功能更加强大 Jconsole的主要功能jvm summary,memory,threads,classes,mbeans都包含在内 支持cpu,memory的sampler 支持visual GC 支持Thread dump 支持Buffer pools 支持application snapshot 支持各种快照的离线分析 支持插件扩展
  • 18. Visualvm使用演示
  • 19. Questions?
  • 20. THANKS!