欢迎来到天天文库
浏览记录
ID:35120789
大小:443.68 KB
页数:24页
时间:2019-03-18
《javaweb应用诊断利器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JavaWeb应用诊断利器——ServiceabilityAgent阿里巴巴核心系统研发部专用计算组梅路峣/云达关亍我•2011.7开始在淘宝实习,从事JVM相关工作•2012.3硕士毕业(北邮计算机专业)•对编程语言的实现很感兴趣,目前关注重点在JVM的实现•工作职责之一是解决阿里线上Java应用的各种故障•yunda.mly@taobao.com•http://weibo.com/u/1063244843主要内容•什么是ServiceabilityAgent(SA)•SA的工作原理•如何利用SA进行Java应用故障诊断•
2、总结主要内容•什么是ServiceabilityAgent(SA)•SA的工作原理•如何利用SA进行Java应用故障诊断•总结什么是ServiceabilityAgent(SA)•服务性(serviceability)是指技术服务人员安装、配置及监控电脑产品,提供硬件戒软件服务的能力,也包括在出现例外情形戒故障时排除问题,使产品可以正常运作的相关能力,包括针对故障除错戒隔离故障,进行根本原因分析等。(节选自维基百科)•OralceJVM(HotSpot)中的SA:TheHotSpot™ServiceabilityAgent(
3、SA)isasetofAPIsfortheJava™programminglanguagewhichmodelthestateofJavaHotSpotVirtualMachine.什么是ServiceabilityAgent(SA)•获取Java进程戒Javacore文件暴露出的原始二进制信息•根据这些二进制信息提取出JVM内部数据结构•根据JVM内部数据结构提取出Java对象•运行在一个独立的进程•主要由Java实现,小部分native代码•SA的Java代码是HotSpot的C++代码的一个镜像•SA组件是HotSpo
4、t标准组成的一部分主要内容•什么是ServiceabilityAgent(SA)•SA的工作原理•如何利用SA进行Java应用故障诊断•总结SA的工作原理•out-of-process和目标进程是两个独立的进程通过进程间通信实现调试不会影响目标进程依赖亍操作系统提供的调试API•建立在一系列的debug原语上连接到目标进程/core查询目标进程/core的symbol读取目标进程/core的内存SA的工作原理•在linux上和gdb类似使用ptrace系统调用PTRACE_ATTACH来进行连接目标进程P
5、TRACE_PEEKDATA从目标进程读取数据PTRACE_DETACH来断开连接主要内容•什么是ServiceabilityAgent(SA)•SA的工作原理•如何利用SA进行Java应用故障诊断•总结使用SA进行问题诊断•利用已有工具jstack(-F,-m),jmap某些选项的功能是由SA来实现的图形工具HSDB,VisualVM的SAPlugin命令行工具CLHSDB图形工具HSDB•HotSpotDebugger启动方式:java-classpath.:$JAVA_HOME/lib/sa-jdi.jars
6、un.jvm.hotspot.HSDBWindowsJDK6u32后版本有支持命令行工具CLHSDB•CommandlineHSDB启动方式:java-classpath.:$JAVA_HOME/lib/sa-jdi.jarsun.jvm.hotspot.CLHSDB有一系列的操作命令,通过help进行查看可以直接attach到core文件,方便解决JVMcrash有javascript支持命令行工具CLHSDB•CLHSDB的几个常用命令:help:查看所有命令的基本使用方式attach:连接到目标进程戒co
7、reuniverse:查看Javaheap的情况inspect:查看某个地址对应的数据结构的内容scanoops:扫描某个地址段的Java对象jseval:执行javascript脚本命令行工具CLHSDB•CLHSDB对javascript的支持输出整个Permgen的内容:jseval"sa.objHeap.iteratePerm(newsapkg.oops.HeapPrinter(java.lang.System.out))"输出整个堆里所有String的内容:jseval"io=java.io;sa.ob
8、jHeap.iterateObjectsOfKlass(newsapkg.oops.HeapPrinter(newio.PrintStream(newio.FileOutputStream('perm.log'))),sa.systemDictionary.find('java/lang/
此文档下载收益归作者所有