住房和城乡建设网站 上海,网站幻灯片js代码,网页设计教程dt,wordpress页面构造器java btrace这篇文章是关于BTrace的 #xff0c;我正在考虑将其作为Java开发人员的隐藏宝藏。 BTrace是用于Java平台的安全#xff0c;动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序#xff08;类似于DTrace#xff0c;适用于OpenSolaris应用程序和OS#xff09… java btrace 这篇文章是关于BTrace的 我正在考虑将其作为Java开发人员的隐藏宝藏。 BTrace是用于Java平台的安全动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序类似于DTrace适用于OpenSolaris应用程序和OS。 很快该工具允许注入跟踪点而无需在运行时重新启动或重新配置Java应用程序。 而且尽管有几种方法可以做到这一点但我今天要讨论的是使用标准JDK捆绑包中的JVisualVM工具。 太酷了 BTrace本身使用Java语言来定义注入跟踪点。 如果您曾经进行过面向方面的编程AOP则该方法看起来非常熟悉。 因此让我们开始一个问题我们有一个使用NoSQL数据库之一例如让它成为MongoDB的应用程序突然开始出现明显的性能下降。 开发人员怀疑应用程序运行过多的查询或更新但不能自信地说。 BTrace在这里可以提供帮助。 首先让我们运行JVisualVM并安装BTrace插件 JVisualVM应该重新启动以使插件出现。 现在当我们的应用程序启动并运行时让我们在JVisualVM应用程序树中右键单击它 将出现以下非常直观的BTrace编辑器带有简单的工具栏 在这里可以定义跟踪工具并将其动态注入正在运行的应用程序中。 BTrace有一个非常丰富的模型来定义应该精确跟踪的内容方法构造函数方法返回错误等。 它还支持开箱即用的聚合因此在应用程序运行时很容易收集大量指标。 对于我们的问题我们想查看与MongoDB相关的哪些方法正在执行。 当我的应用程序使用Spring Data MongoDB时 我对应用程序正在调用org.springframework.data.mongodb.core.MongoOperations接口的任何实现的方法以及每次调用花费的时间感兴趣。 所以我定义了一个非常简单的BTrace脚本 import com.sun.btrace.*;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;BTrace
public class TracingScript {TLS private static String method;OnMethod(clazz org.springframework.data.mongodb.core.MongoOperations, method /.*/)public static void onMongo( ProbeClassName String className, ProbeMethodName String probeMethod, AnyType[] args ) {method strcat( strcat( className, :: ), probeMethod );}OnMethod(clazz org.springframework.data.mongodb.core.MongoOperations, method /.*/, location Location( Kind.RETURN ) )public static void onMongoReturn( Duration long duration ) {println( strcat( strcat( strcat( strcat( Method , method ), executed in ), str( duration / 1000 ) ), ms ) );}
} 让我简要地解释一下我在做什么。 基本上我想知道何时调用org.springframework.data.mongodb.core.MongoOperations的任何实现的任何方法 onMongo标记和调用持续时间 onMongoReturn依次标记。 线程局部变量方法保存完整的合格方法名称带有类而由于使用了有用的BTrace预定义注释 duration参数保存了方法执行时间以纳秒为单位。 尽管它是纯Java但BTrace仅允许使用Java类的一小部分。 这不是问题因为com.sun.btrace.BTraceUtils类提供了许多有用的方法fe strcat 来填补空白。 运行此脚本将产生以下输出 ** Compiling the BTrace script ...
*** Compiled
** Instrumenting 1 classes ...
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 25ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 3ms
Method org.springframework.data.mongodb.core.MongoTemplate::getDb executed in 22ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 19ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 3ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::getDb executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 6ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 0ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::getDb executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::prepareCollection executed in 6ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 1ms
Method org.springframework.data.mongodb.core.MongoTemplate::access$100 executed in 0ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 2ms
Method org.springframework.data.mongodb.core.MongoTemplate::maybeEmitEvent executed in 1ms
... 如您所见输出包含一堆内部类可以通过提供更精确的方法名称模板甚至可以跟踪MongoDB驱动程序来消除它们。 我刚刚开始发现BTrace但是使用该功能强大的工具对开发人员来说 无疑是很有价值的。 参考 BTraceJava开发人员工具箱中的隐藏宝石来自我们的JCG合作伙伴 Andrey Redko在Andriy Redko {devmind}博客上。 翻译自: https://www.javacodegeeks.com/2012/08/btrace-hidden-gem-in-java-developer.htmljava btrace