APM(Application Performance Management) 是用于监控和管理应用性能的工具,核心目标是快速定位性能瓶颈、优化用户体验。其原理可分解为以下步骤:
APM 通过多种技术手段采集应用运行时的关键指标:
X-B3-TraceId
。技术手段:
premain
方法:在 JVM 启动时通过 -javaagent
参数加载,优先于主程序执行。agentmain
方法:通过 Attach API 动态加载到已运行的 JVM(热部署)。long start = System.nanoTime()
,在出口记录耗时并上报。以下伪代码展示如何通过 ASM 在方法前后插入监控逻辑:
public class MonitorMethodVisitor extends MethodVisitor {
public void visitCode() {
// 在方法开头插入: long start = System.nanoTime();
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
mv.visitVarInsn(LSTORE, startVarIndex);
super.visitCode();
}
public void visitInsn(int opcode) {
if (opcode == RETURN) {
// 在方法返回前插入: recordDuration(System.nanoTime() - start);
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
mv.visitVarInsn(LLOAD, startVarIndex);
mv.visitInsn(LSUB);
mv.visitMethodInsn(INVOKESTATIC, "Monitor", "record", "(J)V");
}
super.visitInsn(opcode);
}
}
工具 | 语言支持 | 数据存储 | 核心优势 |
---|---|---|---|
SkyWalking | Java/Go/PHP | Elasticsearch | 低开销、支持 Service Mesh |
Pinpoint | Java | HBase | 全链路追踪粒度细 |
New Relic | 多语言 | 云端 | SaaS 服务、开箱即用 |
-javaagent:/path/skywalking-agent.jar -Dskywalking.agent.service_name=my_app
Tomcat#doFilter
)。