njsuntop 发表于 2018-12-5 12:25:28

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

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

  JVisualVM 是Java 继 JConsole 之后有一款力作,是集成了诸多分析和优化Java程序的工具的工具。 
  我们可以用它来为优化Java程序的内存占用,找出内存泄漏,分析Java程序的CPU占用情况,根据JVisualVM获取到的数据优化JVM配置等。   总之是相当好了~~~~
http://s5.运维网.com/wyfs02/M01/83/A0/wKiom1d4wBPj5-X8AACbdoyqUhw909.jpg
  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. 连接成功.
http://s2.运维网.com/wyfs02/M00/83/A0/wKiom1d4xPXRK2PFAACdjyyZyDA299.jpg
http://s4.运维网.com/wyfs02/M01/83/9F/wKioL1d4xPXjffk8AAFlW7zpTOA966.jpg
  由于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连接就好了。
http://s3.运维网.com/wyfs02/M01/83/9F/wKioL1d4x_WyJ9S3AAFzdmmdTLk849.jpg
http://s3.运维网.com/wyfs02/M02/83/A0/wKiom1d4x6SgzZP5AAF6eXLnvlg017.jpg
  如果需要使用JMX鉴权:可参考我的另外一篇文章:http://hiandroidstudio.blog.运维网.com/5902332/1795340



页: [1]
查看完整版本: 如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU