Android APM方案(一)完成代码注入

什么是APM


APM 是Application perfmance monitor的简称, 应用性能监控。在移动互联网对人们生活影响越来越大的今天,App的功能越来越全面,从吃穿住行,到支付开房,全方面覆盖。相同功能的App存在很多竞品,比如携程和艺龙,天猫和京东,网易云音乐和QQ音乐。随之而来的就是App性能的要求越来越高,不能被动的等待用户异常的发生然后根据线上日志去修复bug,再发补丁版本。主动监控App性能,变得越来越重要,分析App的耗电,UI卡顿,网络性能(Socket连接时间,首字节接受时间等等)成为了当物之急。但是如何能在不更改业务方代码的同时完成一个移动端的监控呢?AOP成为了我们一个很好的选择,我们首先了解一些基本概念。

一些基本概念


  • JavaAgent

代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。

主要作用
可以在加载class文件之前做拦截,对字节码做修改
agent的代码与你的main方法在同一个JVM中运行,并被同一个system classloader装载,被同一的安全策略 (security policy) 和上下文 (context) 所管理。

用法

public class MyAgent {
    public static void agentmain(String args, Instrumentation instrumentation){
        permain(args, instrumentation);
    }

    public static void permain(String args, Instrumentation instrumentation){
        instrumentation.addTransformer(new MainTransformer());
    }

}

如果javaagent是在虚拟机启动之后加载的,我们需要在它的manifest文件中指定Agent-Class属性,它的值是javaagent的实现类,这个实现类需要实现一个agentmain方法

public static void agentmain(String args, Instrumentation instrumentation){
        permain(args, instrumentation);
    }

但是如果javaagent是在JVM启动时通过命令行参数加载的,情况会不太一样,需要在它的manifest文件中指定Premain-Class属性,它的值是javaagent的实现类,这个实现类需要实现一个premain方法。

public static void permain(String args, Instrumentation instrumentation){
        instrumentation.addTransformer(new MainTransformer());
    }


  • Instrumentation

从Agent的两个方法可以看到都会传入2个参数,一个是参数agrs,另一个就是Instrumentation。那Instrumentation是什么呢

来看一段官方的解释

java.lang.instrument
public interface Instrumentation
This class provides services needed to instrument Java programming langua

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值