SlideShare une entreprise Scribd logo
1  sur  30
毕玄
2012-03
   Java Runtime Data Area

                -Xss

              局部变量区        本地方法栈
       PC寄    操作数栈                          -XX:PermSize –

       存器       栈帧
                             方法区           XX:MaxPermSize



               方法栈            堆           -Xms -Xmx




         备注:在Sun JDK中本地方法栈和方法栈是同一个,因此也可用-Xss控制
   Oracle JDK Java Heap划分

      -Xmn   New Generation

         Eden               S0      S1   Old Generation
                -XX:SurvivorRatio
   Oracle JDK内存管理常用参数
     -Xms –Xmx –Xmn –XX:PermSize –XX:MaxPermSize
     -XX:SurvivorRatio
     -XX:+UseParallelGC || -XX:+UseParallelOldGC
      ▪ -XX:MaxTenuringThreshold -XX:ParallelGCThreads
      ▪ -XX:-UseAdaptiveSizePolicy
     -XX:+UseConcMarkSweepGC
      ▪ -XX:CMSInitiatingOccupancyFraction -
        XX:+UseCMSInitiatingOccupancyOnly
     -XX:+DisableExplicitGC –
     XX:+ExplicitGCInvokesConcurrent
   内存管理问题排查常用参数或工具
       -XX:+PrintGCDateStamps –XX:+PrintGCDetails -Xloggc
       -XX:+HeapDumpOnOutOfMemoryError
       -XX:+HeapDumpBeforeFullGC
       -XX:+PrintFlagsFinal
       for CMS GC
        ▪ -XX:+PrintPromotionFailure -XX:+CMSDumpAtPromotionFailure
       jinfo
       jstat
       jmap
       MAT
       btrace
       google perf-tools
   OOM
     java.lang.OutOfMemoryError: {$reason}
   Full GC频繁
   CMS GC
     promotion failed
     concurrent mode failure
-Xms4g –Xmx4g –Xmn2560m
Then to find who use Deflater.init
   java.lang.OutOfMemoryError: {$reason}
     GC overhead limit exceeded
     Java Heap Space
     Unable to create new native thread
     PermGen Space
     Direct buffer memory
     request {} bytes for {}. Out of swap space?
   GC overhead limit exceeded
    Java Heap Space
     未处理异常会造成线程退出
     线程调度慢
     系统响应慢或无响应
      ▪ because gc频繁


   Out of Swap
     Java进程crash
   GC overhead limit exceeded
    Java Heap Space
     monitor app log & gc log
     heap dump or jmap –histo|-dump when oom
     mat analyze heap dump
     app developer or btrace to find where cause
   Out of swap
     crash log
     google-perftools
     then btrace to find where cause


     ps: 也可以先尝试下把-XX:+DisableExplicitGC去
     掉,原因见此link。
   慎用ThreadLocal;
   限制Collection/StringBuilder等的大小;
   限制提交的请求的大小,尤其是批量处理;
   限制数据库返回的数据的大小;
   避免死循环。
   OOM
     java.lang.OutOfMemoryError: {$reason}
   Full GC频繁
   CMS GC
     promotion failed
     concurrent mode failure
   大部分Case
     内存占用过多未释放,但又还不到OOM
   一个特殊的Case
     一个GC频繁的Case
   应用响应慢
   根据gc log判断是不是内存占用过多造成的;
     如是则可以加上-XX:+HeapDumpBeforeFullGC或
      写个脚本,在FGC频繁时dump下内存;
     如不是则需要用pstack+源码来看下具体是什么
      原因触发的。
     ▪ 如是淘宝版的JDK,则可加上-XX:+PrintGCReason
   OOM
     java.lang.OutOfMemoryError: {$reason}
   Full GC频繁
   CMS GC
     promotion failed
     concurrent mode failure
   promotion failed案例一
     363439.937: [Full GC 363439.938: [ParNew
      (promotion failed): 523840K-
      >523840K(523840K), 0.3404490 secs] 1690606K-
      >1712399K(1834560K), 0.3412880 secs]
     这个案例中淘宝版JDK立下了巨大功劳
      ▪ ==WARNNING== allocating large array:
        thread_id[0x00002aaac2d85800], thread_name[ajp-0.0.0.0-8009-
        48], array_size[782611408 bytes], array_length[195652847 elememts]
   promotion failed案例二
     1768.432: [GC 1768.432: [ParNew (promotion
      failed): 1572827K-
      >1572827K(1572864K), 0.2845480 secs]
     1972.208: [CMS: 10545160K-
      >5853155K(14680064K), 8.5355320 secs]
      12105682K->5853155K(16252928K), [CMS Perm :
      20907K->20873K(34952K)], 212.3113910 secs]
      [Times: user=53.38 sys=22.45, real=212.28 secs]
     悲催的CMS GC碎片问题
   空口讲四个
     promotion failed案例三
      ▪ 触发比率过高...
     concurrent mode failure案例一
      ▪ 触发比率过高...
     concurrent mode failure案例二
      ▪ 旧生代小
     concurrent mode failure案例三
      ▪ 碰到的一个permgen造成问题的case
   CMS GC问题触发Serial Full GC,从而导致
    应用响应慢...
   看gc log,判断是否由于触发比率过高或旧
    生代过小造成,如是则调整相应的参数;
   如不是,则继续
     promotion failed
      ▪ 如为内存用完的情况,则dump内存分析;
      ▪ 如为cms gc碎片问题,暂时只能定时执行下jmap –
        histo:live;
     concurrent mode failure
      ▪ 同promotion failed...
   OOM
     java.lang.OutOfMemoryError: {$reason}
   Full GC频繁
   CMS GC
     promotion failed
     concurrent mode failure
   Young GC速度非常慢
     存活对象小的情况下也在几十毫秒以上;
   CMS GC Concurrent-Mark阶段造成了应用暂
    停;
   ...
   记录贴:碰到的一些Java问题
   perftools查看堆内存并解决hbase内存溢出
   BTrace使用简介

Contenu connexe

Tendances

Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)ddviplinux
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.pptFrank Cai
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)wang hongjiang
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄锐 张
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收Tony Deng
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Jinrong Ye
 
5.6 nutshell - 性能优化
5.6 nutshell  - 性能优化5.6 nutshell  - 性能优化
5.6 nutshell - 性能优化Hui Liu
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserverDin Dindin
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 

Tendances (20)

Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
 
JVM及其调优
JVM及其调优JVM及其调优
JVM及其调优
 
Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
Golang advance
Golang advanceGolang advance
Golang advance
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用
 
5.6 nutshell - 性能优化
5.6 nutshell  - 性能优化5.6 nutshell  - 性能优化
5.6 nutshell - 性能优化
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserver
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 

Similaire à Java内存管理问题案例分享

实战HotSpot JVM GC
实战HotSpot JVM GC实战HotSpot JVM GC
实战HotSpot JVM GCdigitalsonic
 
Sun jdk-1.6-gc
Sun jdk-1.6-gcSun jdk-1.6-gc
Sun jdk-1.6-gc锐 张
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析beiyu95
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查ayanamist
 
Jvm memory
Jvm memoryJvm memory
Jvm memorybenewu
 
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuningpprun
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shootingMin Zhou
 
Sun jdk 1.6内存管理 -调优篇-毕玄
Sun jdk 1.6内存管理 -调优篇-毕玄Sun jdk 1.6内存管理 -调优篇-毕玄
Sun jdk 1.6内存管理 -调优篇-毕玄锐 张
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群Shaoning Pan
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
Jvm那些事
Jvm那些事Jvm那些事
Jvm那些事dynamiclu
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理yin gong
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理yin gong
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
How do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partHow do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partacelyc1112009
 
Spark在苏宁云商的实践及经验分享
Spark在苏宁云商的实践及经验分享Spark在苏宁云商的实践及经验分享
Spark在苏宁云商的实践及经验分享alipay
 
Jmm与map reduce简介
Jmm与map reduce简介Jmm与map reduce简介
Jmm与map reduce简介huozhanfeng
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 

Similaire à Java内存管理问题案例分享 (20)

实战HotSpot JVM GC
实战HotSpot JVM GC实战HotSpot JVM GC
实战HotSpot JVM GC
 
Sun jdk-1.6-gc
Sun jdk-1.6-gcSun jdk-1.6-gc
Sun jdk-1.6-gc
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
 
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuning
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shooting
 
Sun jdk 1.6内存管理 -调优篇-毕玄
Sun jdk 1.6内存管理 -调优篇-毕玄Sun jdk 1.6内存管理 -调优篇-毕玄
Sun jdk 1.6内存管理 -调优篇-毕玄
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Jvm那些事
Jvm那些事Jvm那些事
Jvm那些事
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
How do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partHow do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend part
 
Spark在苏宁云商的实践及经验分享
Spark在苏宁云商的实践及经验分享Spark在苏宁云商的实践及经验分享
Spark在苏宁云商的实践及经验分享
 
Jmm与map reduce简介
Jmm与map reduce简介Jmm与map reduce简介
Jmm与map reduce简介
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 

Plus de bluedavy lin

Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutionsbluedavy lin
 
Hbase简介与实践分享
Hbase简介与实践分享Hbase简介与实践分享
Hbase简介与实践分享bluedavy lin
 
Sun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionSun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionbluedavy lin
 
OSGi理论与实战
OSGi理论与实战OSGi理论与实战
OSGi理论与实战bluedavy lin
 

Plus de bluedavy lin (6)

Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutions
 
Hbase简介与实践分享
Hbase简介与实践分享Hbase简介与实践分享
Hbase简介与实践分享
 
菜鸟看Hbase
菜鸟看Hbase菜鸟看Hbase
菜鸟看Hbase
 
JavaOne summary
JavaOne summaryJavaOne summary
JavaOne summary
 
Sun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionSun jdk 1.6 gc english version
Sun jdk 1.6 gc english version
 
OSGi理论与实战
OSGi理论与实战OSGi理论与实战
OSGi理论与实战
 

Java内存管理问题案例分享

  • 2. Java Runtime Data Area -Xss 局部变量区 本地方法栈 PC寄 操作数栈 -XX:PermSize – 存器 栈帧 方法区 XX:MaxPermSize 方法栈 堆 -Xms -Xmx 备注:在Sun JDK中本地方法栈和方法栈是同一个,因此也可用-Xss控制
  • 3. Oracle JDK Java Heap划分 -Xmn New Generation Eden S0 S1 Old Generation -XX:SurvivorRatio
  • 4. Oracle JDK内存管理常用参数  -Xms –Xmx –Xmn –XX:PermSize –XX:MaxPermSize  -XX:SurvivorRatio  -XX:+UseParallelGC || -XX:+UseParallelOldGC ▪ -XX:MaxTenuringThreshold -XX:ParallelGCThreads ▪ -XX:-UseAdaptiveSizePolicy  -XX:+UseConcMarkSweepGC ▪ -XX:CMSInitiatingOccupancyFraction - XX:+UseCMSInitiatingOccupancyOnly  -XX:+DisableExplicitGC – XX:+ExplicitGCInvokesConcurrent
  • 5. 内存管理问题排查常用参数或工具  -XX:+PrintGCDateStamps –XX:+PrintGCDetails -Xloggc  -XX:+HeapDumpOnOutOfMemoryError  -XX:+HeapDumpBeforeFullGC  -XX:+PrintFlagsFinal  for CMS GC ▪ -XX:+PrintPromotionFailure -XX:+CMSDumpAtPromotionFailure  jinfo  jstat  jmap  MAT  btrace  google perf-tools
  • 6. OOM  java.lang.OutOfMemoryError: {$reason}  Full GC频繁  CMS GC  promotion failed  concurrent mode failure
  • 7.
  • 8.
  • 10.
  • 11.
  • 12. Then to find who use Deflater.init
  • 13. java.lang.OutOfMemoryError: {$reason}  GC overhead limit exceeded  Java Heap Space  Unable to create new native thread  PermGen Space  Direct buffer memory  request {} bytes for {}. Out of swap space?
  • 14. GC overhead limit exceeded Java Heap Space  未处理异常会造成线程退出  线程调度慢  系统响应慢或无响应 ▪ because gc频繁  Out of Swap  Java进程crash
  • 15. GC overhead limit exceeded Java Heap Space  monitor app log & gc log  heap dump or jmap –histo|-dump when oom  mat analyze heap dump  app developer or btrace to find where cause
  • 16. Out of swap  crash log  google-perftools  then btrace to find where cause  ps: 也可以先尝试下把-XX:+DisableExplicitGC去 掉,原因见此link。
  • 17. 慎用ThreadLocal;  限制Collection/StringBuilder等的大小;  限制提交的请求的大小,尤其是批量处理;  限制数据库返回的数据的大小;  避免死循环。
  • 18. OOM  java.lang.OutOfMemoryError: {$reason}  Full GC频繁  CMS GC  promotion failed  concurrent mode failure
  • 19. 大部分Case  内存占用过多未释放,但又还不到OOM  一个特殊的Case  一个GC频繁的Case
  • 20. 应用响应慢
  • 21. 根据gc log判断是不是内存占用过多造成的;  如是则可以加上-XX:+HeapDumpBeforeFullGC或 写个脚本,在FGC频繁时dump下内存;  如不是则需要用pstack+源码来看下具体是什么 原因触发的。 ▪ 如是淘宝版的JDK,则可加上-XX:+PrintGCReason
  • 22. OOM  java.lang.OutOfMemoryError: {$reason}  Full GC频繁  CMS GC  promotion failed  concurrent mode failure
  • 23. promotion failed案例一  363439.937: [Full GC 363439.938: [ParNew (promotion failed): 523840K- >523840K(523840K), 0.3404490 secs] 1690606K- >1712399K(1834560K), 0.3412880 secs]  这个案例中淘宝版JDK立下了巨大功劳 ▪ ==WARNNING== allocating large array: thread_id[0x00002aaac2d85800], thread_name[ajp-0.0.0.0-8009- 48], array_size[782611408 bytes], array_length[195652847 elememts]
  • 24. promotion failed案例二  1768.432: [GC 1768.432: [ParNew (promotion failed): 1572827K- >1572827K(1572864K), 0.2845480 secs]  1972.208: [CMS: 10545160K- >5853155K(14680064K), 8.5355320 secs] 12105682K->5853155K(16252928K), [CMS Perm : 20907K->20873K(34952K)], 212.3113910 secs] [Times: user=53.38 sys=22.45, real=212.28 secs]  悲催的CMS GC碎片问题
  • 25. 空口讲四个  promotion failed案例三 ▪ 触发比率过高...  concurrent mode failure案例一 ▪ 触发比率过高...  concurrent mode failure案例二 ▪ 旧生代小  concurrent mode failure案例三 ▪ 碰到的一个permgen造成问题的case
  • 26. CMS GC问题触发Serial Full GC,从而导致 应用响应慢...
  • 27. 看gc log,判断是否由于触发比率过高或旧 生代过小造成,如是则调整相应的参数;  如不是,则继续  promotion failed ▪ 如为内存用完的情况,则dump内存分析; ▪ 如为cms gc碎片问题,暂时只能定时执行下jmap – histo:live;  concurrent mode failure ▪ 同promotion failed...
  • 28. OOM  java.lang.OutOfMemoryError: {$reason}  Full GC频繁  CMS GC  promotion failed  concurrent mode failure
  • 29. Young GC速度非常慢  存活对象小的情况下也在几十毫秒以上;  CMS GC Concurrent-Mark阶段造成了应用暂 停;  ...
  • 30. 记录贴:碰到的一些Java问题  perftools查看堆内存并解决hbase内存溢出  BTrace使用简介