如何使用jvisualvm进行cpu或内存抽样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用jvisualvm进行cpu或内存抽样相关的知识,希望对你有一定的参考价值。

参考技术A 方法/步骤
首先要进入jdk的安装目录bin目录下打开jvisualvm.exe

进入jvisualvm的主页,在主页有一个导航菜单,里面有VisualVM的使用介绍和使用案例,和常见的故障排除指南,在不了解VisualVM的情况下,建议先读一读VisualVM的手册

已抽样eclipse为示例展示操作步骤,双击eclipse(pid)点击【抽样器】进入抽样器页面

点击CPU按CPU开始收集性能数据,状态显示正在进行CPU抽样
默认是按照 热点-方法 降序显示, 点击标题【热点-方法】、【自用时间】就可改变排序方式

点击线程Dump 可生成线程Dump对线程堆进行分析

点击快照,进行快照取样

生成的抽样快照,记录着按CPU抽样开始到点击快照时刻的应用程序运行的状态,可用于问题的保存,分析。快照可以取出来另存为到其他目录文件。然后停止快照即可。

点击内存按内存进行内存数据收集

和CPUC抽样类似,安装使用内存的热点进行排序显示,有 堆柱状图和PermGen柱状图,可根据应用故障现象查看分析相关的类的内存使用情况,

点击快照生成按内存收集数据到点击快照时应用运行的状态,右键快照名称可另存到其他目录

选择是按CPU或内存来抽样收集数据要根据应用的故障现象来决定,如果应用的问题表现在CPU上那就收集CPU快照数据,如果表现在内存上就收集内存快照数据。

如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU

如何使用VisualVM远程监控和优化Tomcat和Java程序的内存和CPU 


JVisualVM 是Java 继 JConsole 之后有一款力作,是集成了诸多分析和优化Java程序的工具的工具。 

我们可以用它来为优化Java程序的内存占用,找出内存泄漏,分析Java程序的CPU占用情况,根据JVisualVM获取到的数据优化JVM配置等。   总之是相当好了~~~~

技术分享

JVisualVM 位于JAVA_HOME/bin目录下 。 直接运行可打开。 打开后界面如下:

由于JVisualVM 本身就是一个Java程序,所以它也被工具获取到了,可以点开看看究竟它长啥样!


如果Java程序是本地的我们可以很方便的监控这些程序。 那程序如果是远程的,那就要稍微麻烦一点了。 
我们需要在远程服务器上配置一下JMX或者jstatd才可以使用jvisualvm

1、 通过jstatd启动RMI服务

 配置java安全访问,将如下的代码存为文件 jstatd.all.policy,放到JAVA_HOME/bin中,其内容如下,

  grant codebase "file:${java.home}/../lib/tools.jar" {

      permission java.security.AllPermission;

  };

            

  执行命令jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.8 &(192.168.1.8  为你服务器的ip地址,&表示用守护线程的方式运行)

  jstatd命令详解 :http://hzl7652.iteye.com/blog/1183182        

  打开jvisualvm, 右键Remort,选择 "Add Remort Host...",在弹出框中输入你的远端IP,比如192.168.1.8. 连接成功.

  

技术分享

技术分享

 由于jstatd监控功能有限,需要您可能需要使用JMX远程监控。

2、通过JMX远程监控。

进入远程服务器tomcat配置在启动文件中加入如下配置:

 start   )
      "$JSVC" $JSVC_OPTS       -java-home "$JAVA_HOME"       -user $TOMCAT_USER       -pidfile "$CATALINA_PID"       -wait "$SERVICE_START_WAIT_TIME"       -outfile "$CATALINA_OUT"       -errfile "&1"       -classpath "$CLASSPATH"       "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS       -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"       -Dcatalina.base="$CATALINA_BASE"       -Dcatalina.home="$CATALINA_HOME"       -Djava.io.tmpdir="$CATALINA_TMP"             -Dprogram.name="$PROGNAME"       -Djava.rmi.server.hostname="您的主机IP地址"       -Dcom.sun.management.jmxremote.port="8534"       -Dcom.sun.management.jmxremote.authenticate="false"       -Dcom.sun.management.jmxremote.ssl="false"       $CATALINA_MAIN
      exit $?
    ;;

其中:

            -Djava.rmi.server.hostname="您的主机IP地址"       -Dcom.sun.management.jmxremote.port="8534"       -Dcom.sun.management.jmxremote.authenticate="false"       -Dcom.sun.management.jmxremote.ssl="false" \

是新加入的。

其中-Dcom.sun.management.jmxremote.port="8543" 指定了 JMX 启动的代理端口;这个端口就是 Visual VM 要连接的端口

其中-Dcom.sun.management.jmxremote.ssl="false" 指定了 JMX 是否启用ssl

其中-Dcom.sun.management.jmxremote.authenticate="false" 指定了 JMX 是否启用鉴权(需要用户名,密码鉴权)


然后重新启动远程Tomcat程序, 在JVisualVM上添加JMX连接就好了。

技术分享

技术分享

如果需要使用JMX鉴权:可参考我的另外一篇文章:http://hiandroidstudio.blog.51cto.com/5902332/1795340

本文出自 “Hiandroid工作室” 博客,请务必保留此出处http://hiandroidstudio.blog.51cto.com/5902332/1795310

以上是关于如何使用jvisualvm进行cpu或内存抽样的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JVisualVM进行性能分析

如何使用JVisualVM进行性能分析

java程序运行完成之后怎么看它所用的时间和内存?

是否可以在 jvisualvm 中同时进行 CPU 和内存分析?

JvisualVM的使用转载

jvisualvm的使用