• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

无信不立

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

【jvisualvm】工具使用

转载博客:https://www.cnblogs.com/kongzhongqijing/articles/3625340.html

https://www.jianshu.com/p/0f7613b88a12

https://blog.csdn.net/jlb882800/article/details/54378069

https://blog.csdn.net/kl28978113/article/details/53817827

 

一、介绍

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).
从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。Monitor界面则是监控Java堆大小,Permgen大小,Classes和线程数量。jdk不同版本中界面会不太一致,如有的含cpu监控,有的则不含(jdk1.6.0_10未包含)。

官网上关于jvisualvm的用法介绍 

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html  

 作用:JVM和监控的应用程序运行在不同的服务器上,减轻应用程序的负担,特别是HeapDump的时候,应用常能够续负担很大。 
 
VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。
  • 内存信息
  • 线程信息
  • Dump堆(本地进程)
  • Dump线程(本地进程)
  • 打开堆Dump。堆Dump可以用jmap来生成。
  • 打开线程Dump
  • 生成应用快照(包含内存信息、线程信息等等)
  • 性能分析。 :idea: CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)
  • ……

二、配置

本地监控不需要配置,只要打开某个JAVA程序就会自动的加入到本地监控中。
远程监控: 本机的VisualVM就必须和远程的JVM要进行通信, Visualvm目前支持两种remote connection方式,分别是jstatd和JMX方式。
远程监控某个中间件时,需要修改中间件的启动文件,添加上关于jmx等的信息。
(1)直接在启动容器中配置
服务器 上的 tomcat 配置 jvm 启动参数。
在 tomcat 的 catalina.bat 中添 加如下参数: 
JAVA_OPTS="$JAVA_OPTS 
-Djava.rmi.server.hostname=192.168.0.237    
-Dcom.sun.management.jmxremote.port=18999
-Dcom.sun.management.jmxremote.ssl=false 
                      -Dcom.sun.management.jmxremote.authenticate=false"

上述参数未设用户名与密码登录。
  客户端VisualVM配置 (我客户端用的是WinXP).
     a.直接反键点击Remote,选择Add Remote Host...
     b.在弹出的界面中输入远程机器的IP地址(192.168.0.237),这个IP地址会加入到Remote节点下.
     c.反键点击这个IP地址,选择Add JMX Connection, 在弹出的界面中输入刚配置的端口号(18999), 这个连接会加入到该IP节点下.
     d.反键点击这个连接,选择Open.
View Code

(2)在启动脚本(JVM启动参数)中设置

#!/bin/bash
#用于simple部署类型

time=`date "+%Y%m%d%H%M%S"`
LOGBASE=/var//logs/route
if [ ! -d $LOGBASE ]; then mkdir -p $LOGBASE;fi

logfile="$LOGBASE/funds-route.run.log.${time}"

#DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8411"
#配置到了plus环境变量 默认dev和test开启
JAVA_OPTS=" $JVM_TEST_ARGS $DEBUG_OPTS -server -XX:PermSize=128m -XX:MaxPermSize=512m -Xmn2g -Xms5g -Xmx5g -XX:NewRatio=3
-XX:ParallelCMSThreads=8
-XX:+CMSParallelRemarkEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+CMSClassUnloadingEnabled
-XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSFullGCsBeforeCompaction=0 -XX:+UseCMSCompactAtFullCollection
-XX:CMSInitiatingOccupancyFraction=80 -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError
-Xloggc:${LOGBASE}/route.gc.log.${time} -XX:ErrorFile=${LOGBASE}/froute.vmerr.log.${time} -XX:HeapDumpPath=${LOGBASE}/funds-route.heaperr.log.${time}
-Dfile.encoding=UTF-8 -Ddruid.mysql.usePingMethod=false
-Djava.rmi.server.hostname=10.24.62.175
-Dcom.sun.management.jmxremote.port=18999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
"
##
exec /usr/local/java8/bin/java $JAVA_OPTS -jar /opt/soft/jetty/start.jar jetty.base=/opt/soft/jetty jetty.port=8977 >> $logfile 2>&1
View Code

 连接后的效果图:

 

三、使用

http://zhouanya.blog.51cto.com/4944792/1370017

 

visualVM 插件

https://github.com/irockel/tda

visualVM还可通过扩展增加功能。启动页面时有“visualVM 扩展入门指南”,如果需要哪些插件可看下这里的介绍。

在“工具”-》“插件”-》可用插件项中列出。

除这些可用插件外,还可以增加第三方的插件扩展功能。

Third Party Plugins:

BTrace Plugin: support for creating, deploying and saving BTrace scripts directly from the VisualVM. Home »

Coherence Plugin: summarized statistics and information for a JMX enabled Coherence cluster. Home »

CRaSH Plugin: support for the CRaSH open source shell for the Java Platform in VisualVM. Home »

OSGi Plugin: basic management of OSGi platforms via JMX. Home »

TDA Plugin: Thread Dump Analyzer is a GUI for analyzing thread dumps generated by the Java VM. Home »

 

其他插件里:

 Buffer Monitor: monitoring usage of direct buffers created by ByteBuffer.allocateDirect and mapped buffers created by FileChannel.map.

 Buffer Pools和MBeans Browser可以通过GUI的方式查看DirectMemory的即时使用情况。

如果是JDK 7及以上版本,可以用jconsole或者jvisualvm的MBean窗口查看java.nio.BufferPool.direct属性。参考:https://www.zhihu.com/question/55033583
 

四、使用实例

1、插件“Visual GC"使用。

转自:http://supercharles888.blog.51cto.com/609344/1179790

安装 ”Visual GC"插件:

这个插件是jvisualvm的插件,它非常强大,可以动态的对指定的进程进行监控,并且来通过统计面板来分类显示出各项任务/事件的总时间开销:

安装方法: Tool->Plugin->Available Plugins:  

(点击下一步,安装,安装完成后重启jvisualvm)

重启Visual VM 之后,就可以看到这个"Visual GC"已经被正确的显示了。

 

 

 

posted on 2019-05-14 19:40  无信不立  阅读(480)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3