利用java-tracer来录制方法调用过程

java-tracer是一个能够记录方法调用栈的工具,通过javaagent方式挂载到进程中,提供信息查询、类信息查看、实时线程信息等功能。用户可以设置跟踪特定方法,观察详细的调用链路和耗时,有助于理解如spring、mybatis等框架的内部原理。
摘要由CSDN通过智能技术生成

介绍

对于程序开发一般要从两个角度去考虑,业务开发更关注功能逻辑实现,是一个业务问题;技术开发则需要关注性能稳定性,是一个纯技术问题。功能逻辑是一个大话题,涉及思维方式,业务需求,比较复杂,不太好量化,但是对于性能稳定性,却是一个技术领域的问题,对性能的追求是一个码农应有的素质。
要想对性能有所追求,就要对系统有所了解,项目开发不是一个独立的事件,大的工程往往依赖很多人很多工具的辅助才能完成。正常情况下只需要定义好接口,把功能当一个黑盒来使用就行了,但是涉及到性能,有时候,就有必要适当考虑一下“黑盒”内部实现结节了。
说了半天闲话,其实对于程序开发者尤其是java开发者,我们开发中经常用到各种成熟的框架,用起来很舒服,用得舒服的时候往往会想为啥用得这么舒服,这时候就会去看文档了,但是要想学习精髓,还是得写demo, 看源码,debug,本文即介绍一个辅助看源码和debug的工具

工具

地址

项目地址:https://github.com/fengzhongke/java-tracer
工具地址:https://github.com/fengzhongke/java-tracer/raw/master/java-tracer.jar

功能

java-tracer工具通过agent的方式,启动的时候挂载到java进程上,就可以记录某些方法运行的栈记录了,这些运行栈记录以xml的形式展现,以便收缩和展开

使用

1.写一个交互式数据库查询程序,类名com.hema.sre.pool.test.JdbcTest,当从console输入一条sql加回车之后,执行函数execSql并返回结果

//com.hema.sre.pool.test.JdbcTest
public class JdbcTest {
    public static void main(String[] args) throws Exception {
        try (Scanner scanner = new Scanner(System.in)) {
            while (scanner.hasNext()) {
                String line = scanner.nextLine();
                if (!"q".equalsIgnoreCase(line)) {
                    execSql(line);
                }
            }
        }
    }
    public static void execSql(String sql) throws SQLException{
        String url = "jdbc:mysql://127.0.0.1:3306";
        String user = "kongche";
        String password = "hanlang.hl";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = getConn(url, user, password);
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            ResultSetMetaData meta = rs.getMetaData();
            int size = meta.getColumnCount();
            while (rs.next()) {
                for (int i = 1; i <= size; i++)System.out.println(meta.getColumnName(i) + ":" + rs.getString(i));
            }
        } finally {
            if (rs != null)rs.close();
            if (stmt != null)stmt.close();
            if (conn != null)conn.close();
        }
    }
    public static Connection getConn(String url, String user, String password) throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }
}

2.用下载java-tracer.jar,放在本地,例如放在/tmp/java-tracer.jar
3.启动程序
如果为IDE启动,则在VM参数里面添加 -javaagent:/tmp/java-tracer.jar
如果是直接脚本启动,可以在启动参数里面添加-javaagent:/tmp/java-tracer.jar

效果

基本信息

1.查看信息
用浏览器打开:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值