BTrace

How can write logs to a file in btrace?

半世苍凉 提交于 2019-12-23 12:57:21
问题 I have following btrace script. I would like to record entry and exit of functions in a specific class. .. package com.sun.btrace.samples; import com.sun.btrace.BTraceUtils; import com.sun.btrace.Profiler; import com.sun.btrace.annotations.*; @BTrace class Profiling { @Property Profiler swingProfiler = BTraceUtils.Profiling.newProfiler(); @OnMethod( clazz="com.pkg.classname", method="/.*/") void entry(@ProbeMethodName(fqn=true) String probeMethod) { BTraceUtils.print("Entry" ); BTraceUtils

btrace with JDK5

自闭症网瘾萝莉.ら 提交于 2019-12-14 03:46:34
问题 Can we use bTrace with JDK5 or lesser versions? If not, what is that things which is provided in JDK6 that makes bTrace work? My understanding is that btrace working on Java Byte Code Instrumentation which was there for JDK5 as well. is there some extra features of instrumentation which is being exploit by bTrace? 回答1: Please refer here: http://kenai.com/projects/btrace/forums/forum/topics/13112-running-BTrace-on-JRE Here is what have they answered: this scenario is not tested. In theory, it

Execute shell script from spring web application deployed on cloudfoundry

你说的曾经没有我的故事 提交于 2019-12-08 01:10:13
问题 I am trying to call Btrace script from Spring web application deployed on cloudfoundry. The execution command is /var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd/tomcat/webapps/ROOT/WEB-INF/classes/bin/btrace.sh 532 /var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd/tomcat/webapps/ROOT/WEB-INF/classes/bin/DatabaseQueries.java But I get this error: java.io.IOException: Cannot run program "/var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd

Spring Boot引起的“堆外内存泄漏”排查及经验总结

大城市里の小女人 提交于 2019-12-06 17:35:44
背景 为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize=128m -XX:InitialCodeCacheSize=128m, -Xss512k -Xmx4g -Xms4g,-XX:+UseG1GC -XX:G1HeapRegionSize=4M”,实际使用的物理内存如下图所示: 排查过程 1. 使用Java层面的工具定位内存区域(堆内内存、Code区域或者使用unsafe.allocateMemory和DirectByteBuffer申请的堆外内存) 笔者在项目中添加 -XX:NativeMemoryTracking=detail JVM参数重启项目,使用命令 jcmd pid VM.native_memory detail 查看到的内存分布如下: 发现命令显示的committed的内存小于物理内存,因为jcmd命令显示的内存包含堆内内存、Code区域、通过unsafe

Execute shell script from spring web application deployed on cloudfoundry

▼魔方 西西 提交于 2019-12-06 06:39:23
I am trying to call Btrace script from Spring web application deployed on cloudfoundry. The execution command is /var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd/tomcat/webapps/ROOT/WEB-INF/classes/bin/btrace.sh 532 /var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd/tomcat/webapps/ROOT/WEB-INF/classes/bin/DatabaseQueries.java But I get this error: java.io.IOException: Cannot run program "/var/vcap/data/dea/apps/petclinic-0-fef4b0e052097a0cd2bedb8018c28dcd/tomcat/webapps/ROOT/WEB-INF/classes/bin/btrace.sh": java.io.IOException: error=13, Permission denied I

使用 Mybatis 真心不要偷懒!

我怕爱的太早我们不能终老 提交于 2019-12-05 12:38:21
本文首发个人公众号《andyqian》,期待你的关注! 前言 这篇文章非常简单,没有什么高深技术。这些细节用过Mybatis的童鞋都知道。写这篇文章的缘由是:在最近的工作中,接手了一个外包项目,发现项目中 mapper 文件全部是自动生成的,代码十分冗余且不易维护,用知乎上的回答,这算得上是名副其实的”屎山”代码了。现在用 Mybatis做持久层算是Java系的主流,其中有一个主要的原因就是灵活性,但通过代码生成工具恰恰打破它的灵活性,生成一堆冗余且无用的代码,方法的命名也十分奇怪,总之,简直就是灾难。前者一时爽,后者呜呼哀哉,特别是上线后,那就更可怕了,到底改还是不改呢?不改强迫症,看着就不舒服,一改就要花费成倍的时间,仿佛是生产事故在像你招手。so,本着程序员本是同根生的原则,真心建议大家不要使用生成工具。前期的一点点时间的节省,后期真的就需要成倍的时间。 自动生成代码的若干宗罪 : SQL怎么优化? 命名不规范如何修改? 冗余代码怎么办?常常是为了一个代码,生成一堆代码。 参数可理解性? … 传参方式 1. 使用 _parameter 关键字 接口: List<Address> queryAddressBySimplte(String address,String coinType); XML文件: <sql id="querySQL"> select oid, party

再谈Java 生产神器 BTrace

随声附和 提交于 2019-12-03 05:59:59
本文首发于个人公众号《andyqian》,期待你的关注~ 前言 在上一篇文章《 Java 生产神器 BTrace 》中我们认识了BTrace,并了解到 BTrace 脚本如何编写,如何执行,不熟悉的朋友,也可以对着文章照葫芦画瓢。但对于我们技术人来说,仅有这些是不够的,我们必须弄清楚每一个参数的意义,用法,才能百变不离其宗。另外,在这基础之上,还有一些更高阶的用法也是需要我们掌握的。 用法 在 BTrace 的用户指南中,将 BTrace 的常用用法分为类注解,方法注解,方法参数注解,它们各司其职,构造成了BTrace。下面分别介绍其使用方法: 类注解 @BTrace 注解的作用域为类,我们可以理解像Java类中的 class 关键字一样的作用。作用域与之类似的还有:DTrace,DTraceRef,这两个注解涉及到另外一种脚本语言,且不常用,不在本文中展开。 方法注解 @com.sun.btrace.annotations.OnMethod 在方法注解中,最常见的莫过于@OnMethod,顾名思义,该注解作用于trace方法上。在该注解中,有三个非常重要的属性: clazz 表示我们需要监听类的全限定名称,也支持匹配子类。例如:下述示例 3所述,也可以通过正则匹配多个类中的多个方法,如示例 4 中所示。 method 表示我们需要监听的方法,同样的也支持正则匹配。

BTrace介绍和生产环境例子

拜拜、爱过 提交于 2019-12-03 05:59:43
一/简单介绍 BTrace 是一个可靠的,用来动态跟踪Java程序的工具。它通过动态对运行中的Java程序进行字节码生成来工作。BTrace会对运行中的Java程序的类插入一些跟踪操作 来对被跟踪的程序进行热替换。 BTrace 名词 探测点 (Probe Point) 就是一系列的跟踪语句被执行的“地方”或者“事件”。探测点就是我们想要执行一些跟踪语句的地方或者事件。 跟踪动作或简称动作 (Trace Actions) 就是那些当探测点被触发时所执行的跟踪语句。 动作方法 BTrace的跟踪语句是必须定义在一个类的某个静态方法里的,这个静态方法就叫“动作”方法。 BTrace 程序结构 一个BTrace程序就是一个普通的Java类,这个类至少有一个这样的方法: public static void *** 其次这个方法还需要加上BTrace相关的注解。这些注解用来指明被跟踪程序的“位置”(也就是前面提到的探测点)。跟踪动作需要在这个静态方法的方法体里指定。这些(注意,可以有多个)静态方法就是所谓的“动作”方法。 BTrace的限制 为了保证跟踪动作是“只读”的(也就是这些动作不可以修改被跟踪程序的状态)和有限度的(比如在固定时间里结束)。一个BTrace程序只允许完成一些指定的动作。下面是BTrace一些不可以完成的事情: 不能创建新的对象 不能创建新的数组 不能抛出异常

利用神器BTrace 追踪线上 Spring Boot应用运行时信息

谁都会走 提交于 2019-12-03 05:59:30
概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信息以便定位问题。传统的日志记录方式的确可以,但有时非常麻烦,甚至可能需要重启服务,因此代价太大,这时可以借助一个牛批的工具: BTrace ! BTrace 可用于动态跟踪正在运行的 Java程序,其原理是通过动态地检测目标应用程序的类并注入跟踪代码 ( “字节码跟踪” ),因此可以直接用于监控和追踪线上问题而无需修改业务代码并重启应用程序。 BTrace 的使用方式是用户自己编写符合 BTrace使用语法的脚本,并结合 btrace 命令,来获取应用的一切调用信息,就像下面这样: <btrace>/bin/btrace <PID> <trace_script> 其中 <PID> 为被监控 Java应用的 进程ID <trace_script> 为 根据需要监控的信息 而自行编写的 Java脚本 本文就来实操一波 BTrace工具的使用,实验环境如下: OS: CentOS 7.4 64bit BTrace版本: 1.3.11.3 被追踪的 Java应用: Spring Boot 2.1.1 应用 ,这里使用我的文章 《Spring Boot应用缓存实践之:Ehcache加持》 一文中的 Spring

BTrace 初探

匿名 (未验证) 提交于 2019-12-02 20:37:20
BTrace 是一款java诊断工具,在解决现场问题的时候非常有用。 今天使用的时候碰到几个坑,先记录一下. 下载下来以后直接运行报错 root@iZ2ze89756yjbvq7le6obdZ:~/btrace-bin-1.3.11/bin# ./btrace 6582 /root/testBtrace.java Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/source/util/TaskListener at com.sun.btrace.client.Client.compile(Client.java:181) at com.sun.btrace.client.Client.compile(Client.java:164) at com.sun.btrace.client.Main.main(Main.java:189) Caused by: java.lang.ClassNotFoundException: com.sun.source.util.TaskListener at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader