Jvisualvm探索:插件安装、类加载速度调优、BTrace
2017-10-16 00:02
465 查看
一、插件安装
visualvim插件网址:http://visualvm.github.io/plugins.htmljvisualvm是随jdk一同发布的jvm诊断工具,通过插件可以扩展很多功能,插件扩展也是jvisualvm的精华所在。
打开该工具,通过菜单“工具”—>“插件”开发以下对话框:
在可用插件tab中选择需要安装的插件,本博文中需要用到两个插件如上图中的方框所示。
二、调整IDEA类加载速度
本部分的时间测量用到插件Visual GC。
IDEA在启动时,由于加载很多的类,占用了较长的时间,其实在加载这些类时,还有很重要的一步就是验证这些加载的类。平时我们都是在组内开发工程,可以认为这些加载的编译代码是可靠的,不需要在加载的视乎再进行字节码验证。我们可以通过参数
-Xverify:none禁止字节码验证,加快IDEA的启动过程。
这个参数要加载IDEA的配置文件中,一般情况下,配置文件在个人目录下:
修改后的配置文件如下:
-Xms512m -Xmx1500m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:MaxJavaStackTraceDepth=-1 -agentlib:yjpagent64=probe_disable=*,disablealloc,disabletracing,onlylocal,disableexceptiontelemetry,delay=10000,sessionname=IntelliJIdea2017.2 -Xverify:none
这些参数也可在jvisualvm的
概述面板下看到:
通过添加参数
-Xverify:none配置后,类加载速度提高30s以上。可以通过
visual vm插件面板查看:
根据
visual vm中面板的显示内容,我们还可以调整jvm堆的设置,尽情探索吧~
三、BTrace
1、BTrace有两种用法:一种做为jvisualvm中插件的方式使用,另一种为单独使用btrace二进制分发包的方式。2、单独使用BTrace github: https://github.com/btraceio/btrace
3、btrace代码自动生成工具(使用必备):https://btrace.org/btrace/?spm=5176.100239.blogcont7569.12.ndJs5r
jvisualvm插件方式获取返回值,参数等信息
1.测试代码public class JdkTest { public int add(int a, int b) { return a + b; } public static void main(String[] args) throws IOException { JdkTest traceTest = new JdkTest(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); reader.readLine(); int a = (int)Math.round(Math.random() * 1000); int b = (int)Math.round(Math.random() * 1000); System.out.println(traceTest.add(a, b)); } }
2.BTrace
运行测试代码,在jvisualvm中会出现JdkTest的进程号,右键“Tracing Application…”,添加如下btrace代码:
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript { /* put your code here */ @OnMethod( clazz="JdkTest", method="add", location=@Location(Kind.RETURN)) public static void func(@Self JdkTest instance,int a, int b, @Return int result){ println("调用堆栈:"); jstack(); println(strcat("方法参数A:",str(a))); println(strcat("方法参数B:",str(b))); println(strcat("方法结果:",str(result))); } }
得到如下图:
单击start,在output面板中出现如下提示:
** Compiling the BTrace script ... *** Compiled ** Instrumenting 1 classes ... *** Done ** BTrace up&running *** Done ** BTrace up&running
此时,回到idea中,在ieda控制台下会看到如下提示:
btrace DEBUG: debugMode is true btrace DEBUG: startupRetransform is true btrace DEBUG: dumpClasses is true btrace DEBUG: dumpDir is C:\Users\zjw94377\AppData\Local\Temp\ btrace DEBUG: trackRetransforms is true btrace DEBUG: unsafeMode is false btrace DEBUG: probe descriptor path is . btrace DEBUG: stdout is false btrace DEBUG: starting agent thread btrace DEBUG: starting server at 61255 btrace DEBUG: waiting for clients btrace DEBUG: client accepted Socket[addr=/127.0.0.1,port=61257,localport=61255] btrace DEBUG: got instrument command btrace DEBUG: loading BTrace class btrace DEBUG: verifying BTrace class ... btrace DEBUG: BTrace class TracingScript verified btrace DEBUG: preprocessing BTrace class TracingScript ... btrace DEBUG: ... preprocessed btrace DEBUG: loaded 'TracingScript' successfully btrace DEBUG: creating BTraceRuntime instance for TracingScript btrace DEBUG: created BTraceRuntime instance for TracingScript btrace DEBUG: sending Okay command btrace DEBUG: client TracingScript: got com.sun.btrace.comm.OkayCommand@7612cdd3 btrace DEBUG: about to defineClass TracingScript btrace DEBUG: defineClass succeeded for TracingScript btrace DEBUG: starting client command handler thread btrace DEBUG: new Client created com.sun.btrace.agent.RemoteClient@65bfa95f btrace DEBUG: retransforming loaded classes btrace DEBUG: filtering loaded classes btrace DEBUG: candidate class JdkTest added btrace DEBUG: client TracingScript: got com.sun.btrace.comm.RetransformationStartNotification@e69ee88 btrace DEBUG: calling retransformClasses (1 classes to be retransformed) btrace DEBUG: client TracingScript: got com.sun.btrace.comm.RetransformClassNotification@2364d094 btrace DEBUG: transformed class JdkTest btrace DEBUG: waiting for clients btrace DEBUG: client TracingScript: got com.sun.btrace.comm.OkayCommand@299cbbe4
随意输入一个数字后,回到jvisualvm中,在output面板中会出现如下结果:
** Compiling the BTrace script ... *** Compiled ** Instrumenting 1 classes ... *** Done ** BTrace up&running *** Done ** BTrace up&running
调用堆栈:
JdkTest.add(JdkTest.java:11)
JdkTest.main(JdkTest.java:20)
方法参数A:943
方法参数B:61
方法结果:1004
** BTrace has stopped
** BTrace has stopped
单独使用Btrace获取返回值,参数等信息
1.把上面的btrace代码保存为TracingScript.java2、采用如下的方式运行:
也可得到结果(其中21972为测试程序JdkTest运行时的进程号)。
btrace补充
1、Btrace详细指南:https://yq.aliyun.com/articles/75692、BTrace注解:https://github.com/btraceio/btrace/wiki/BTrace-Annotations?spm=5176.100239.blogcont7569.22.IB84VP
相关文章推荐
- 本地wordpress加载速度缓慢的解决方法和安装插件
- eclipse安装完成python插件,却不能加载成功
- jvisualvm安装Visual GC插件
- 【Eclipse提高开发速度-插件篇】安装VJET插件,JS等提示开发插件
- Eclipse 插件安装方法和插件加载失败解决办法
- 使用vsto制作的outlook插件,安装加载失败
- 【Eclipse提高开发速度-插件篇】Eclipse插件安装慢得几个原因
- Eclipse 插件安装方法和插件加载失败解决办法
- 电脑端浏览器 以手机 mobile 形式 加载网页 可以安装插件 User Agent Switcher
- jvisualvm安装visualgc插件(java.net网站已关闭)
- 优化多说插件的加载速度
- jvisualvm安装插件
- jvisualvm安装visualgc插件
- CSS,JS缓存插件,加快页面加载速度
- 【转】Eclipse 插件安装方法和插件加载失败解决办法
- Kali Linux安装Remmina无法加载RDP插件
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
- Yii安装EClientScript插件扩展实现css,js文件代码压缩合并加载功能
- 【JVM】jvisualvm.exe监控工具安装插件
- Eclipse 插件安装方法和插件加载失败解决办法