pinpoint分以下主要模块:
pinpoint-agent,这个工程引用了其它核心jar,整个pinpoint监控的配置文件在这个项目中: pinpoint.config。
pinpoint-bootstrap:
这个工程定义了当jvm启动时,利用java instrument,实现对于后续pinpoint-core jar及相应plugin的加载等任务。
进行以下步骤:
1.将pinpoint-core包加入javassist的bootstreap类加载器当中。
2.会创建plugin类加载器,加载所有用户自定义插件jar,如dubbo等。
3.创建pinpoint类加载器,加载pinpoint profile jar包,及找出一个Agent实现,这里是DefaultAgent,并创建它。
4.创建好后,调用DefaultAgent的start方法,启动agent实例,底层会创建cpu,jvm内存的收集线程。
pinpoint-core:
这个工程是整个pinpoint核心jar包,如Agent的接口定义都在此包中。
pinpoint-profile:
这个工程包含DefaultAgent的实现。
在创建DefaultAgent的时候,所处类加载器是pinpoint classLoad。这里会做以下事情:
1.加载所有扩展plugin,这些plugin有些需要对相应类进行增强,所以会先将这些plugin类注册到transformerRegistry中,这里transformerRegistry内部用要增强的类名作为key,对应用户实现增强逻辑的transformer实现作为value。
2.创建一个ClassFileTransformerDispatcher,将它加入到java的instrumentation中。之后应用类加载器加载类时会运行ClassFileTransformerDispatcher的transform方法。由ClassFileTransformerDispatcher去根据类名查找到之前存放在transformerRegistry中的用户实现的字节码增强transformer类。
然后回调这个用户实现的transformer类,以此实现字节码增强。
类加载器层次: