Mais conteúdo relacionado Semelhante a Java trouble shooting (20) Java trouble shooting1. Java shooting
新人培训课程 | 从入门到精通
作者:周忱 | CDO数据交换平台
微博:@MinZhou
邮箱:zhouchen.zm@taobao.com
5. Java Troubleshooting
屌丝的工具集
• jps • vmstat
• jinfo • iostat
• jstat • sar
• jstack • ps
• jmap • top
• jhat • free
• pstack
• pmap
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
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
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
24. Java Troubleshooting
Q&A
作者:周忱 | CDO数据交换平台
微博:@MinZhou
邮箱:zhouchen.zm@taobao.com
Taobao Java Team | zhouchen.zm