apm 字节码技术

服务端 APM

假设有这样一个函数,我们需要进行监控

复制代码
public void saveUser() {
    doDbOperation();
    flushCache();
}

我们需要对它的字节码进行改写,自动注入一些代码达到监控的功能,一个最简单的模型如下面的代码所示

复制代码
public void _saveUser() {
    // 获取开始时间
    long start = System.currentTimeMillis();
    // 记录未捕获异常
    Throwable uncaughtException = null;

    try {
        doDbOperation();
        flushCache();
    } catch (Throwable e) {
        uncaughtException = e;
        throw e;
    } finally {
        // 记录结束时间
        long end = System.currentTimeMillis();
        // 上报 spanName、开始时间、结束时间、是否有未捕获的异常
        APMUtil.report("UserService.saveUser", start, end, uncaughtException);
    }
}
相关推荐
rannn_111几秒前
【Java项目】中北大学Java+数据库课设|校园食堂智能推荐与反馈系统
java·数据库·后端·课程设计·中北大学
NE_STOP9 分钟前
SpringBoot-shiro-jwt-dubbo-redis分布式统一权限系统(完结)
java
zfj32114 分钟前
java函数式接口 @FunctionalInterface用法
java·函数·function
TracyCoder12320 分钟前
并发编程(二):Java原子类(Atomic Classes)全解析
java·原子类·atomic
野犬寒鸦30 分钟前
从零起步学习MySQL || 第十六章:MySQL 分库分表的考量策略
java·服务器·数据库·后端·mysql
lsx20240635 分钟前
Eclipse 添加书签
开发语言
木风小助理41 分钟前
JavaAtomicInteger底层实现深度解析
java
易营宝44 分钟前
高效的跨境电商广告优化系统:易营宝广告投放实操指南
大数据·开发语言·人工智能·php
superman超哥1 小时前
路由的艺术:Rust Web 框架中的高效匹配与类型安全提取
开发语言·rust·编程语言·rust web框架·rust路由
BD_Marathon1 小时前
搭建MyBatis框架之创建MyBatis的映射文件(五)
java·数据库·mybatis