阿里JVM之路 阿里云事业部 GreenTeaJUG 费辉
关于我 工作 兴趣 微博 2011年7月,中科院软件所毕业后加入淘宝 分析解决未知的问题 @呱哥在淘宝 http://weibo.com/u/2651541140
关于阿里巴巴 阿里巴巴集团 2014 Q3财报 淘宝网、天猫、聚划算、全球速卖通、阿里巴巴国际交易市场、1688、阿里妈妈、阿里云计算 商品交易总额556(单位:人民币十亿) 总收入16.8(单位:人民币十亿) http://alibabagroup.com/cn/ir/financial
提纲 性能优化 故障排查 回馈社区
性能优化 Intrinsic JVM内部增加Intrinsic方法 GCIH Off-Heap JFR 分析JFR Log进行优化
性能优化 JAVA方法 Pure Java JIT Intrinsic JNI 开销大、效率低
性能优化 新增Intrinsic Crc32/Crc32C Byte/Char数组比较 AscII 与 UTF8转换 利用CPU的SSE指令快速实现Crc计算 Byte/Char数组比较 利用CPU的SSE指令进行快速比较 AscII 与 UTF8转换 利用CPU的SSE指令进行快速转换
性能优化 GCIH(Garbage Collector Invisable Heap) mmap申请堆外存储空间,将Java对象映射为文件 JVM进程间直接共享GCIH内部对象,降低物理内存使用。 堆外的对象不会被gc线程访问,减少GC开销 限制:共享的Java对象必须只读
性能优化 GCIH 接口 object moveIn(object obj) 根据object的引用链,递归移入每个Java对象。 用对象的Header记录某个对象是否移入,以及移入后堆外内存地址,防止重复移入。
性能优化 GCIH 共享前 共享后 JVM1 JVM2 JVM3 … JVMn JVM1 JVM2 JVM3 … JVMn 共享前 共享后 JVM1 Sharable Objs Other Objs JVM2 JVM3 … JVMn JVM1 Sharable Objs Other Objs JVM2 JVM3 … JVMn Sharable Objs
性能优化 Java Flight Recorder 在OpenJDK的实现比较粗糙 GC相关(20个) 线程同步相关(6个) JIT相关(6个) 类加载(2个) VMOperation(1个) 在OpenJDK的实现比较粗糙
性能优化 JFR在Ali JVM中的实现 JFR Log分析 记录在jfr log中 事件分等级 低开销 各种记录事件的事后分析 优化Java应用
故障排查 增加可配置参数 -XX:配置 与外部工具结合 AliSystemWideProfiling
故障排查 ArrayAllocationWarningSize PrintGCReason 大数组分配警告阈值 在Xx案例中立功
故障排查 ReclaimMostNativeMemory CountException PrintExceptionStackTrace 回收物理内存 CountException 统计异常 PrintExceptionStackTrace 统计异常stackTrace
故障排查 TraceUnsafeAllocateMemory JIT_Monitor 统计使用Unsafe分配内存情况 JVM内部新增线程 从IP到JAVA方法名称解析 与ASWP配合,做性能优化与故障排查
故障排查 与ASWP结合示例
回馈社区 理念 受益于开源 反馈于开源 共建开放、繁荣社区 行动 将patch回馈于社区
回馈社区 Bug Fix GC, Compiler, SA 阿里定制 GCIH JFR
回馈社区 Compiler GC SA patches Crash in C1 or C2 CMS CLHSDB http://jvm.taobao.org/index.php/Sc_jvm_patch
Q&A 谢谢!