Code Monkey home page Code Monkey logo

javaagent's Introduction

🎉 Javaagent 🎉

概述

javaagent 是一个简单优雅的 java agent ,利用 java 自带的 instrument 特性+ javassist 字节码编辑技术,实现了无侵入的方法级性能监控。相比于NewRelic或者开源的pinpoint,以及阿里的arthas,本工具主打的是简单,我们只记录每个方法的执行次数和时间,并输出到json格式的日志文件中。基于javaagent的日志,你可以使用严丽同学开发的agent日志分析工具进行分析查询,或者可以自己去写分析器,这样可以让你快速定位生产环境的性能瓶颈。

集成

java启动参数中就有javaagent,你只需要在JAVA_OPTS中加入-javaagent:/opt/javaagent/javaagent.jar=/opt/javaagent/agent.properties就实现了方法级监控。其中=前指定的是jar包的路径,=后指定的是对agent的一些配置参数。

agent.properties说明

# 需要监控的包,多个包用分号分隔
agent.include.package=com.XXX
# 不需要监控的包,多个包用分号分隔。 需要监控的包-不需要监控的包就是真正要监控的包
agent.exclude.package=
# 日志文件,会自动增加日期后缀
agent.log.file=/opt/agent.log
# 日志输出周期
agent.log.interval.seconds=600
# 不需要监控的类的正则表达式
agent.exclude.class.regex=
# 是否记录平均时间
agent.log.avg.execute.time=false
# 记录方法的耗时时是采用nanoTime,还是currentTimeMillis,nanoTime更准确,但是会耗时一些
agent.log.nano=true

agent日志分析器使用

agent日志分析器是我同事严丽使用SpringBoot+h2数据库开发的分析工具,除了基础功能,对于有sql能力的同学,你可以直接使用agent日志分析工具自带的console登录后,直接写sql进行统计,你可以按自己想要的维度来进行处理。

  • JDBC URL: jdbc:h2:mem:~/h2test
  • USer Name : sa
  • Password : 空

登录后,你就可以尽情地写 sql 对类、方法的执行次数、执行时间进行统计查询。

欢迎关注我的公众号

  • 程序员阿水

程序员阿水

javaagent's People

Contributors

dingjs avatar hexhero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

javaagent's Issues

关于javassist版本

您好!请问javassist文件夹里的javassist是哪个版本?还是您修改过的?如果被修改过是在什么地方呢?

isNeedLogExecuteInfo

isNeedLogExecuteInfo 这个方法 在运行时加载 类时。当经过
if (isNeeded) { Set<String> excludeClassRegexs = ConfigUtils.getExcludeClassRegexs(); if (null != excludeClassRegexs && !excludeClassRegexs.isEmpty()) { for (String regex : excludeClassRegexs) { isNeeded = !Pattern.matches(regex, className); if (!isNeeded) { System.err.println("regex = "+regex+", className"+className); break; } } } }
这段代码后,isNeeded 总会变false,
配置如下:
#\u9700\u8981\u76d1\u63a7\u7684\u5305\uff0c\u591a\u4e2a\u5305\u7528\u5206\u53f7\u5206\u9694 agent.include.package=com.v.photos.admin.utils.HttpUtils #\u4e0d\u9700\u8981\u76d1\u63a7\u7684\u5305\uff0c\u591a\u4e2a\u5305\u7528\u5206\u53f7\u5206\u9694\u3002 \u9700\u8981\u76d1\u63a7\u7684\u5305-\u4e0d\u9700\u8981\u76d1\u63a7\u7684\u5305\u5c31\u662f\u771f\u6b63\u8981\u76d1\u63a7\u7684\u5305 agent.exclude.package= #\u65e5\u5fd7\u6587\u4ef6\uff0c\u4f1a\u81ea\u52a8\u589e\u52a0\u65e5\u671f\u540e\u7f00 agent.log.file=C:\\opt\\log\\agent.log #\u65e5\u5fd7\u8f93\u51fa\u5468\u671f agent.log.interval.seconds=10 #\u4e0d\u9700\u8981\u76d1\u63a7\u7684\u7c7b\u7684\u6b63\u5219\u8868\u8fbe\u5f0f #agent.exclude.class.regex= #\u662f\u5426\u8bb0\u5f55\u5e73\u5747\u65f6\u95f4 agent.log.avg.execute.time=true #\u9ed8\u8ba4\u4e0d\u9700\u8981\u76d1\u63a7\u7684\u7c7b\u7684\u6b63\u5219\u8868\u8fbe\u5f0f agent.exclude.class.regex.default=.*EnhancerByCGLIB.*;.*FastClassByCGLIB.*;.*EnhancerBySpringCGLIB.*;*.FastClassBySpringCGLIB.* #\u8bb0\u5f55\u65b9\u6cd5\u7684\u8017\u65f6\u65f6\u662f\u91c7\u7528nanoTime,\u8fd8\u662fcurrentTimeMillis,nanoTime\u66f4\u51c6\u786e\uff0c\u4f46\u662f\u4f1a\u8017\u65f6\u4e00\u4e9b agent.log.nano=true agent.pojo.monitor.open=true

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.