SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Java             shooting
       新人培训课程 | 从入门到精通




                         作者:周忱 | CDO数据交换平台
                         微博:@MinZhou
                         邮箱:zhouchen.zm@taobao.com
Java Troubleshooting




                   为什么我的应用这么慢?




                             Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       为什么出现OOM?




                                   Taobao Java Team | zhouchen.zm
Java Troubleshooting




              为什么我的程序半天不动了?




                         Taobao Java Team | zhouchen.zm
Java Troubleshooting




                        屌丝的工具集
           •   jps          •   vmstat
           •   jinfo        •   iostat
           •   jstat        •   sar
           •   jstack       •   ps
           •   jmap         •   top
           •   jhat         •   free
                            •   pstack
                            •   pmap


                                         Taobao Java Team | zhouchen.zm
Java Troubleshooting




               示例-分析挂起的Java应用1




                            Taobao Java Team | zhouchen.zm
Java Troubleshooting




               示例-分析挂起的Java应用2




                            Taobao Java Team | zhouchen.zm
Java Troubleshooting




                  示例-分析跑得慢的应用




                            Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       高富帅的工具集
           • jvisualvm        •   Perf
           • IBM memory       •   systemtap
             Analysis tools   •   Oprofile
           • Btrace           •   Google perf-tools
           • TProfiler        •   Intel Vtune
           • HouseMD          •   blktrace
           • …                •   …




                                          Taobao Java Team | zhouchen.zm
Java Troubleshooting




          示例-jvisualvm分析跑得慢的应用




                          Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       基本概念—内存结构
                          -Xss

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

                存器        栈帧
                                      JVM方法区          XX:MaxPermSize



                       JVM方法栈          JVM堆          -Xms -Xmx




               备注:在Hotspot中本地方法栈和JVM方法栈是同一个,因此也可用-Xss控制




                                                     Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       基本概念—内存分配
   1、堆上分配
     大多数情况在eden上分配,偶尔会直接在old上分配
     细节取决于GC的实现
     这里最重要的优化是TLAB

   2、栈上分配
     原子类型的局部变量
     或基于EA后标量替换转变为原子类型的局部变量

   3、堆外分配
     DirectByteBuffer
     FileChannel.map
     或直接使用Unsafe.allocateMemory,但不推荐这种方式
                                   Taobao Java Team | zhouchen.zm
Java Troubleshooting




   基本概念—内存回收(Garbage Collection)
   1、Hotspot认为没有引用的对象是dead的

   2、Hotspot将引用分为四种
     Strong、Soft、Weak、Phantom
     Strong即默认通过Object o=new Object()这种方式赋值的引用;
     Soft、Weak、Phantom这三种则都是继承Reference;
     在Full GC时会对Reference类型的引用进行特殊处理:
      Soft:内存不够时一定会被GC、长期不用也会被GC,可通过
     -XX:SoftRefLRUPolicyMSPerMB来设置;
      Weak:一定会被GC,当被mark为dead,会在
     ReferenceQueue中通知;
      Phantom:本来就没引用,当从jvm heap中释放,会通知

                                    Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       基本概念—分代


     经IBM研究,通常运行的程序有98%的对象是临时对象,
      因此Sun Hotspot对JVM堆采用了分代的方式来管理,以
      提升GC的效率。




                                 Taobao Java Team | zhouchen.zm
Java Troubleshooting




                  基本概念—JVM堆的分代
          -Xmn     New Generation

              Eden                 S0      S1   Old Generation
                       -XX:SurvivorRatio




         备注:通常将对新生代进行的回收称为Minor GC;对旧生代进行的回收称为Major GC,但由于
         Major GC除并发GC外均需对整个堆进行扫描和回收,因此又称为Full GC。




                                                       Taobao Java Team | zhouchen.zm
Java Troubleshooting




               基本概念—GC算法及其组合




                          Taobao Java Team | zhouchen.zm
Java Troubleshooting




                         开启 GC Log
       -verbose:gc // 可以辅助输出一些详细的GC信息
       -XX:+PrintGCDetails // 输出GC详细信息
       -XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间
       -XX:+PrintGCDateStamps // GC发生的时间信息
       -XX:+PrintHeapAtGC // 在GC前后输出堆中各个区域的大小
       -Xloggc:[file] // 将GC信息输出到单独的文件中

       gc的日志拿下来后可使用GCLogViewer或gchisto进行分析。




                                                  Taobao Java Team | zhouchen.zm
Java Troubleshooting




                           ParNew GC Log
    39.910: [GC 39.910: [ParNew: 261760K->0K(261952K), 0.2314667 secs] 262017K-
       >26386K(1048384K), 0.2318679 secs]




                                                              Taobao Java Team | zhouchen.zm
Java Troubleshooting




                               CMS GC Log
   40.146: [GC [1 CMS-initial-mark: 26386K(786432K)] 26404K(1048384K),
      0.0074495 secs]
   40.154: [CMS-concurrent-mark-start]
   40.683: [CMS-concurrent-mark: 0.521/0.529 secs]
   40.683: [CMS-concurrent-preclean-start]
   40.701: [CMS-concurrent-preclean: 0.017/0.018 secs]
   40.704: [GC40.704: [Rescan (parallel) , 0.1790103 secs]40.883: [weak refs
      processing, 0.0100966 secs] [1 CMS-remark: 26386K(786432K)]
      52644K(1048384K), 0.1897792 secs]
   40.894: [CMS-concurrent-sweep-start]
   41.020: [CMS-concurrent-sweep: 0.126/0.126 secs]
   41.020: [CMS-concurrent-reset-start]
   41.147: [CMS-concurrent-reset: 0.127/0.127 secs]               CMS GC 详解

                                                                 Taobao Java Team | zhouchen.zm
Java Troubleshooting




               示例-分析gc overhead OOM




                                Taobao Java Team | zhouchen.zm
Java Troubleshooting




                  示例-分析Permgen OOM




                                Taobao Java Team | zhouchen.zm
Java Troubleshooting




                  示例-分析堆外内存占用




                            Taobao Java Team | zhouchen.zm
Java Troubleshooting




               示例-分析挂起的Java应用3




                            Taobao Java Team | zhouchen.zm
Java Troubleshooting




                       Q&A




                             作者:周忱 | CDO数据交换平台
                             微博:@MinZhou
                             邮箱:zhouchen.zm@taobao.com



                                     Taobao Java Team | zhouchen.zm

Mais conteúdo relacionado

Mais procurados

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
bluedavy lin
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
Frank Cai
 
Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇
bluedavy lin
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
丁 宇
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
taobao.com
 

Mais procurados (20)

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
并发编程交流
并发编程交流并发编程交流
并发编程交流
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Java内存管理问题案例分享
Java内存管理问题案例分享Java内存管理问题案例分享
Java内存管理问题案例分享
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
 
Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇
 
給初學者的Spark教學
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
 
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuning
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 

Semelhante a Java trouble shooting

Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析
beiyu95
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
benewu
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄
锐 张
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
锐 张
 
Java程序员也需要了解CPU
Java程序员也需要了解CPUJava程序员也需要了解CPU
Java程序员也需要了解CPU
Min Zhou
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
丁 宇
 
低功耗服务器定制与绿色计算——章文嵩(淘宝)
低功耗服务器定制与绿色计算——章文嵩(淘宝)低功耗服务器定制与绿色计算——章文嵩(淘宝)
低功耗服务器定制与绿色计算——章文嵩(淘宝)
drewz lin
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
maclean liu
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
丁 宇
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
zhliji2
 

Semelhante a Java trouble shooting (20)

Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
 
Jmm与map reduce简介
Jmm与map reduce简介Jmm与map reduce简介
Jmm与map reduce简介
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Java中的内存泄漏与防止办法
Java中的内存泄漏与防止办法Java中的内存泄漏与防止办法
Java中的内存泄漏与防止办法
 
Java程序员也需要了解CPU
Java程序员也需要了解CPUJava程序员也需要了解CPU
Java程序员也需要了解CPU
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
 
Java bytecode
Java bytecodeJava bytecode
Java bytecode
 
低功耗服务器定制与绿色计算
低功耗服务器定制与绿色计算低功耗服务器定制与绿色计算
低功耗服务器定制与绿色计算
 
低功耗服务器定制与绿色计算——章文嵩(淘宝)
低功耗服务器定制与绿色计算——章文嵩(淘宝)低功耗服务器定制与绿色计算——章文嵩(淘宝)
低功耗服务器定制与绿色计算——章文嵩(淘宝)
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
Jcaptcha extension audio free tts
Jcaptcha extension audio free ttsJcaptcha extension audio free tts
Jcaptcha extension audio free tts
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
05.wls调优
05.wls调优05.wls调优
05.wls调优
 
Jvm独家剖析
Jvm独家剖析Jvm独家剖析
Jvm独家剖析
 
Class loader
Class loaderClass loader
Class loader
 

Mais de Min Zhou (7)

Distributed Data Analytics at Taobao
Distributed Data Analytics at TaobaoDistributed Data Analytics at Taobao
Distributed Data Analytics at Taobao
 
Big Data Analytics Infrastructure
Big Data Analytics InfrastructureBig Data Analytics Infrastructure
Big Data Analytics Infrastructure
 
准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究
 
Hive
HiveHive
Hive
 
淘宝Hadoop数据分析实践
淘宝Hadoop数据分析实践淘宝Hadoop数据分析实践
淘宝Hadoop数据分析实践
 
Anthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceAnthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduce
 
Redpoll
RedpollRedpoll
Redpoll
 

Java trouble shooting

  • 1. Java shooting 新人培训课程 | 从入门到精通 作者:周忱 | CDO数据交换平台 微博:@MinZhou 邮箱:zhouchen.zm@taobao.com
  • 2. Java Troubleshooting 为什么我的应用这么慢? Taobao Java Team | zhouchen.zm
  • 3. Java Troubleshooting 为什么出现OOM? Taobao Java Team | zhouchen.zm
  • 4. Java Troubleshooting 为什么我的程序半天不动了? Taobao Java Team | zhouchen.zm
  • 5. Java Troubleshooting 屌丝的工具集 • jps • vmstat • jinfo • iostat • jstat • sar • jstack • ps • jmap • top • jhat • free • pstack • pmap Taobao Java Team | zhouchen.zm
  • 6. Java Troubleshooting 示例-分析挂起的Java应用1 Taobao Java Team | zhouchen.zm
  • 7. Java Troubleshooting 示例-分析挂起的Java应用2 Taobao Java Team | zhouchen.zm
  • 8. Java Troubleshooting 示例-分析跑得慢的应用 Taobao Java Team | zhouchen.zm
  • 9. Java Troubleshooting 高富帅的工具集 • jvisualvm • Perf • IBM memory • systemtap Analysis tools • Oprofile • Btrace • Google perf-tools • TProfiler • Intel Vtune • HouseMD • blktrace • … • … Taobao Java Team | zhouchen.zm
  • 10. Java Troubleshooting 示例-jvisualvm分析跑得慢的应用 Taobao Java Team | zhouchen.zm
  • 11. Java Troubleshooting 基本概念—内存结构 -Xss 局部变量区 本地方法栈 PC寄 操作数栈 -XX:PermSize – 存器 栈帧 JVM方法区 XX:MaxPermSize JVM方法栈 JVM堆 -Xms -Xmx 备注:在Hotspot中本地方法栈和JVM方法栈是同一个,因此也可用-Xss控制 Taobao Java Team | zhouchen.zm
  • 12. Java Troubleshooting 基本概念—内存分配 1、堆上分配 大多数情况在eden上分配,偶尔会直接在old上分配 细节取决于GC的实现 这里最重要的优化是TLAB 2、栈上分配 原子类型的局部变量 或基于EA后标量替换转变为原子类型的局部变量 3、堆外分配 DirectByteBuffer FileChannel.map 或直接使用Unsafe.allocateMemory,但不推荐这种方式 Taobao Java Team | zhouchen.zm
  • 13. Java Troubleshooting 基本概念—内存回收(Garbage Collection) 1、Hotspot认为没有引用的对象是dead的 2、Hotspot将引用分为四种 Strong、Soft、Weak、Phantom Strong即默认通过Object o=new Object()这种方式赋值的引用; Soft、Weak、Phantom这三种则都是继承Reference; 在Full GC时会对Reference类型的引用进行特殊处理: Soft:内存不够时一定会被GC、长期不用也会被GC,可通过 -XX:SoftRefLRUPolicyMSPerMB来设置; Weak:一定会被GC,当被mark为dead,会在 ReferenceQueue中通知; Phantom:本来就没引用,当从jvm heap中释放,会通知 Taobao Java Team | zhouchen.zm
  • 14. Java Troubleshooting 基本概念—分代 经IBM研究,通常运行的程序有98%的对象是临时对象, 因此Sun Hotspot对JVM堆采用了分代的方式来管理,以 提升GC的效率。 Taobao Java Team | zhouchen.zm
  • 15. Java Troubleshooting 基本概念—JVM堆的分代 -Xmn New Generation Eden S0 S1 Old Generation -XX:SurvivorRatio 备注:通常将对新生代进行的回收称为Minor GC;对旧生代进行的回收称为Major GC,但由于 Major GC除并发GC外均需对整个堆进行扫描和回收,因此又称为Full GC。 Taobao Java Team | zhouchen.zm
  • 16. Java Troubleshooting 基本概念—GC算法及其组合 Taobao Java Team | zhouchen.zm
  • 17. Java Troubleshooting 开启 GC Log -verbose:gc // 可以辅助输出一些详细的GC信息 -XX:+PrintGCDetails // 输出GC详细信息 -XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间 -XX:+PrintGCDateStamps // GC发生的时间信息 -XX:+PrintHeapAtGC // 在GC前后输出堆中各个区域的大小 -Xloggc:[file] // 将GC信息输出到单独的文件中 gc的日志拿下来后可使用GCLogViewer或gchisto进行分析。 Taobao Java Team | zhouchen.zm
  • 18. Java Troubleshooting ParNew GC Log 39.910: [GC 39.910: [ParNew: 261760K->0K(261952K), 0.2314667 secs] 262017K- >26386K(1048384K), 0.2318679 secs] Taobao Java Team | zhouchen.zm
  • 19. Java Troubleshooting CMS GC Log 40.146: [GC [1 CMS-initial-mark: 26386K(786432K)] 26404K(1048384K), 0.0074495 secs] 40.154: [CMS-concurrent-mark-start] 40.683: [CMS-concurrent-mark: 0.521/0.529 secs] 40.683: [CMS-concurrent-preclean-start] 40.701: [CMS-concurrent-preclean: 0.017/0.018 secs] 40.704: [GC40.704: [Rescan (parallel) , 0.1790103 secs]40.883: [weak refs processing, 0.0100966 secs] [1 CMS-remark: 26386K(786432K)] 52644K(1048384K), 0.1897792 secs] 40.894: [CMS-concurrent-sweep-start] 41.020: [CMS-concurrent-sweep: 0.126/0.126 secs] 41.020: [CMS-concurrent-reset-start] 41.147: [CMS-concurrent-reset: 0.127/0.127 secs] CMS GC 详解 Taobao Java Team | zhouchen.zm
  • 20. Java Troubleshooting 示例-分析gc overhead OOM Taobao Java Team | zhouchen.zm
  • 21. Java Troubleshooting 示例-分析Permgen OOM Taobao Java Team | zhouchen.zm
  • 22. Java Troubleshooting 示例-分析堆外内存占用 Taobao Java Team | zhouchen.zm
  • 23. Java Troubleshooting 示例-分析挂起的Java应用3 Taobao Java Team | zhouchen.zm
  • 24. Java Troubleshooting Q&A 作者:周忱 | CDO数据交换平台 微博:@MinZhou 邮箱:zhouchen.zm@taobao.com Taobao Java Team | zhouchen.zm