pinpoint Agent-启动加载插件分析
来源:互联网 发布:百度贴吧获取数据失败 编辑:程序博客网 时间:2024/05/18 03:11
Agent加载类采用了JDK的Instrumentation技术。
程序的入口为:com.navercorp.pinpoint.bootstrap.PinpointBootStrap,入口方法自然而然的是premain, 在此方法中没有什么关键的语句,无非就是获取环境变量,获取agent包的路径,加载到JDK的load中。最关键的一句就是bootStrap.start(),此方法调用PinpointStarter的start方法,此方法首先获取获取环境变量中配置的agentId和applicationName,并且校验。
然后采用Java的ServiceLoader类获取TraceMetadata、 ServiceType,通过TraceMetadata获取注解信息。读取配置信息。本方法最核心的就是创建agent,启动加载所有的核心也都在这个Agent类中,此类默认是DefaultAgent对象,通过反射机制创建的。
DefaultAgent对象的所有核心操作都在构造方法中。
其中加载插件的方法主要是pluginContexts = loadPlugins(agentOption);
追踪方法即到具体插件的的加载中
Load方法遍历加载每个plugin中的插件。其实是根据ServiceLoader加载的。
其中在preparePlugin方法中,可以看到自定义插件中的构造方法中的参加,就是在这里注入的。而plugin.setup(guardPluginContext)方法就是自定义插件中的需要实现的方法,其中自定义插件中的transformTemplate.transform就是调用的DefaultProfilerPluginContext.addClassFileTransformer.也就是本方法的第二行。
具体加载类文件,然后进行二进制操作的是instrumentation.addTransformer(wrappedTransformer, true);//ClassFileTransformerDispatcher
在此处instrumentation是ClassFileTransformerDispatcher的对象,跟踪代码到ClassFileTransformerDispatcher.transform0方法中。而此处的transformer是MatchableClassFileTransformerGuardDelegate的对象,跟踪代码得到自定义插件中拦截方法的具体内容。
- pinpoint Agent-启动加载插件分析
- pinpoint Agent-TCP连接分析
- Pinpoint 插件开发
- OpenStack neutron-openvswitch-agent 启动分析
- pinpoint
- pinpoint
- pinpoint
- 【经验记录】pinpoint-web显示不了agent的信息
- Pinpoint中agent各个端口数据发送的过程
- Nutch插件加载分析
- Nutch插件加载分析
- pinpoint源码分析--第一节 安装与说明
- pinpoint的Collector-TCP源码分析
- OpenStack Neutron源码分析:ovs-neutron-agent启动源码解析
- puppet agent源码分析之agent启动和run_rest-api的实现
- pinpoint插件开发之一:牛刀小试,调整gson插件
- pinpoint插件开发之二:从零开始新建一个插件
- Agent插件浅析
- iOS 技术支持网址
- 经典散文集锦:读者杂志卷首语大荟萃
- CC1110下载程序接口电路图详解
- iOS 判断整数的位数,每位分别是什么。
- [Android-Camera开发]Android平台Camera实时预览数据处理即实时滤镜实现方法探讨(三)--通过Shader实现YUV转换RBG
- pinpoint Agent-启动加载插件分析
- {题解}[jzoj3885]【长郡NOIP2014模拟10.22】搞笑的代码
- Nodejs基础:路径处理模块path总结
- JAVA基础【7.1】《Java核心技术1》异常、断言、日志和调试-异常
- Arch Linux 下的 ADSL 拨号上网
- CDH5.9.1-p0.4搭建呕心沥血之作
- excel导入(HSSFWorkbook)
- js迭代器——外部迭代器
- 《Linux内核设计与实现》读书笔记(三)- Linux的进程