pfinder实现原理揭秘
内容提要
本文介绍了京东自研的pfinder应用全链路监控系统的核心原理和架构设计,包括多维监控、自动埋点、应用拓扑、调用链追踪等功能。pfinder使用字节码注入实现增强,解决了跨线程传递traceId的问题。
关键要点
-
pfinder是京东自研的APM系统,支持调用链追踪、应用拓扑和多维监控。
-
pfinder无需修改代码,只需在启动文件中增加脚本即可接入。
-
pfinder支持京东主流中间件和常用开源组件。
-
pfinder具备多维监控、自动埋点、应用拓扑、调用链追踪等功能。
-
pfinder使用字节码注入技术解决跨线程传递traceId的问题。
-
字节码增强技术是pfinder的核心,涉及字节码的修改和注入。
-
多种字节码修改框架(如ASM、javassist、bytebuddy、bytekit)可用于实现相同功能。
-
JVMTI接口允许开发者监控JVM运行时指标和实现代码调试功能。
-
Instrumentation接口使Java开发者能够编写Agent进行字节码修改。
-
pfinder通过加载配置文件中的服务和插件实现字节码增强。
-
pfinder的插件加载和字节码增强在服务初始化过程中完成。
-
pfinder通过TracingRunnable实现traceId的跨线程传递。
-
pfinder支持在线热部署功能,允许类搜索、反编译和热更新。
延伸问答
pfinder是什么,它的主要功能有哪些?
pfinder是京东自研的APM系统,主要功能包括调用链追踪、应用拓扑、多维监控、自动埋点和自动故障分析等。
pfinder如何实现字节码增强?
pfinder通过字节码注入技术实现增强,使用多种字节码修改框架如ASM、javassist等,解决了跨线程传递traceId的问题。
pfinder的接入方式是什么?
pfinder无需修改代码,只需在启动文件中增加两行脚本即可接入。
pfinder支持哪些中间件和开源组件?
pfinder支持京东主流中间件如jimdb、jmq、jsf,以及常用开源组件如tomcat、http client、mysql和es等。
pfinder如何解决跨线程传递traceId的问题?
pfinder通过TracingRunnable实现traceId的跨线程传递,确保在使用线程池或@Async时不会丢失traceId。
pfinder的在线热部署功能是如何实现的?
pfinder通过jmtp与服务端交互,允许类搜索、反编译和热更新等功能,从而实现在线热部署。