Java trouble shooting

1,439 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,439
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
23
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Java trouble shooting

  1. 1. Java shooting 新人培训课程 | 从入门到精通 作者:周忱 | CDO数据交换平台 微博:@MinZhou 邮箱:zhouchen.zm@taobao.com
  2. 2. Java Troubleshooting 为什么我的应用这么慢? Taobao Java Team | zhouchen.zm
  3. 3. Java Troubleshooting 为什么出现OOM? Taobao Java Team | zhouchen.zm
  4. 4. Java Troubleshooting 为什么我的程序半天不动了? Taobao Java Team | zhouchen.zm
  5. 5. Java Troubleshooting 屌丝的工具集 • jps • vmstat • jinfo • iostat • jstat • sar • jstack • ps • jmap • top • jhat • free • pstack • pmap Taobao Java Team | zhouchen.zm
  6. 6. Java Troubleshooting 示例-分析挂起的Java应用1 Taobao Java Team | zhouchen.zm
  7. 7. Java Troubleshooting 示例-分析挂起的Java应用2 Taobao Java Team | zhouchen.zm
  8. 8. Java Troubleshooting 示例-分析跑得慢的应用 Taobao Java Team | zhouchen.zm
  9. 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. 10. Java Troubleshooting 示例-jvisualvm分析跑得慢的应用 Taobao Java Team | zhouchen.zm
  11. 11. Java Troubleshooting 基本概念—内存结构 -Xss 局部变量区 本地方法栈 PC寄 操作数栈 -XX:PermSize – 存器 栈帧 JVM方法区 XX:MaxPermSize JVM方法栈 JVM堆 -Xms -Xmx 备注:在Hotspot中本地方法栈和JVM方法栈是同一个,因此也可用-Xss控制 Taobao Java Team | zhouchen.zm
  12. 12. Java Troubleshooting 基本概念—内存分配 1、堆上分配 大多数情况在eden上分配,偶尔会直接在old上分配 细节取决于GC的实现 这里最重要的优化是TLAB 2、栈上分配 原子类型的局部变量 或基于EA后标量替换转变为原子类型的局部变量 3、堆外分配 DirectByteBuffer FileChannel.map 或直接使用Unsafe.allocateMemory,但不推荐这种方式 Taobao Java Team | zhouchen.zm
  13. 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. 14. Java Troubleshooting 基本概念—分代 经IBM研究,通常运行的程序有98%的对象是临时对象, 因此Sun Hotspot对JVM堆采用了分代的方式来管理,以 提升GC的效率。 Taobao Java Team | zhouchen.zm
  15. 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. 16. Java Troubleshooting 基本概念—GC算法及其组合 Taobao Java Team | zhouchen.zm
  17. 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. 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. 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. 20. Java Troubleshooting 示例-分析gc overhead OOM Taobao Java Team | zhouchen.zm
  21. 21. Java Troubleshooting 示例-分析Permgen OOM Taobao Java Team | zhouchen.zm
  22. 22. Java Troubleshooting 示例-分析堆外内存占用 Taobao Java Team | zhouchen.zm
  23. 23. Java Troubleshooting 示例-分析挂起的Java应用3 Taobao Java Team | zhouchen.zm
  24. 24. Java Troubleshooting Q&A 作者:周忱 | CDO数据交换平台 微博:@MinZhou 邮箱:zhouchen.zm@taobao.com Taobao Java Team | zhouchen.zm

×