1. VisualVM是什么

按照VisualVM官网(http://visualvm.github.io/)上的介绍,VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具。专为开发和生产时间使用而设计。

我们在jdk安装包中也可以发现它

2. IDEA安装VisualVM插件

File-> Setting-> Plugins -> Browers Repositrories 搜索VisualVM Launcher安装并重启IDEA。

出现上图中的两个按钮即为安装成功,当我们通过他们启动项目时,会自动打开VisualVM控制台面板。

3. VisualVM本地使用

右侧有概述(Overview)、监视(Monitor)、线程(Threads)、抽样器(Sampler)几个标签,其中

  • 概述中可以看到程序的基本信息和启动参数、环境变量等等;
  • 监视是几个折线图,用于显示CPU、内存(分为Heap和Metaspace)、类和线程的使用情况或者数量,另外还包括执行垃圾回收和对堆 Dump的快捷功能;
  • 线程可详细查看每个线程的运行时间及状态等;
  • 抽样器可对CPU和内存进行一段时长的取样,从而对应用程序进行分析。

使用时,可通过监视中的各个折线图查看系统的变化,如果执行某段程序时,某个指标出现突然增大等问题,同时程序运行也出现问题,可进入到该面板做细致检查。

如果某段程序执行时CPU飙升或者内存溢出,此时排除系统性能原因,多半是由于低效的代码或者不合理的堆空间分配引起,可以在复现该问题的同时到抽样器面板进行抽样,从而确定应该优化哪个方法或者分配多大内存。

当对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。在 VisualVM 的监视标签和线程标签内,我们可以查看当前应用程序中所有活动线程(Live threads)和守护线程(Daemon threads)的数量等实时信息。

具体使用方法很直观,不再一一介绍,如果要进行测试,可参考该篇博客:http://www.cnblogs.com/wade-xu/p/4369094.html

4. 远程监视

在实际工作中,需要在本机监控的生产环境下的jvm,Visualvm目前支持两种remote connection方式,分别是jstatd和JMX方式: 这里主要介绍的是通过JMX方式.。

4.1 修改远程jvm配置

进入JAVA_HOME\jre\lib\management\,拷贝一份jmxremote.password.template 并改名为 jmxremote.password到当前目录,并去掉# monitorRole  QED 和 # controlRole  R&D 这两行前面的注释符号。

[root@izbp1cq2wdg9kxunr0sz02z ~]# cd /usr/java/jdk/jdk1.8.0_172/jre/lib/management
[root@izbp1cq2wdg9kxunr0sz02z management]# cp jmxremote.password.template jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# ls
jmxremote.access jmxremote.password jmxremote.password.template management.properties snmp.acl.template
[root@izbp1cq2wdg9kxunr0sz02z management]# vim jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chmod 600 jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chown root jmxremote.password

我这里使用的是默认的两个远程控制账号,如果在 jmxremote.password 中自定义了远程登录账号和密码,需要修改同目录下的jmxremote.access 文件,该文件可以控制访问权限。

4.2 修改远程机器上需要被监控的程序的配置文件

我这里是监控Tomcat容器内部署的应用

修改TOMCAT_HOME/bin/catalian.sh文件,添加

export JAVA_OPTS="-Djava.rmi.server.hostname=47.xx.xxx.xx1 -Dcom.sun.management.jmxremote.port=18999  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"

详细参数如下

 参数 描述
com.sun.management.jmxremote true / false. Default is true
com.sun.management.jmxremote.port Port number. No default.
com.sun.management.jmxremote.ssl true / false. Default is true.
com.sun.management.jmxremote.ssl.enabled.protocols Default SSL/TLS protocol version.
com.sun.management.jmxremote.ssl.enabled.cipher.suites Default SSL/TLS cipher suites.
com.sun.management.jmxremote.ssl.need.client.auth true / false. Default is false
com.sun.management.jmxremote.authenticate true / false.Default is true
com.sun.management.jmxremote.password.file JRE_HOME/lib/management/jmxremote.password
com.sun.management.jmxremote.access.file JRE_HOME/lib/management/jmxremote.access
com.sun.management.jmxremote.login.config Default login configuration is a file-based password authentication

重启tomcat。

可以用 netstat -anp| grep 18999 ,查看守护线程是否已经启动。

4.3 VisualVM配置

IDEA安装使用 VisualVM 及VisualVM 远程监视的更多相关文章

  1. VisualVM通过ssl远程连接JVM

    VisualVM通过密码连接JVM实例如下 https://www.cnblogs.com/qq931399960/p/10960573.html 虽然设置了密码,但还是不够安全,只要获取到密码,在任 ...

  2. 远程监视jboss应用java内存的配置

    前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...

  3. 远程监视jboss应用java内存的配置(实测) .

    前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...

  4. 安装好mysql后允许远程连接

    安装好mysql后允许远程连接 http://blog.sina.com.cn/s/blog_3eba8f1c0100tsox.html http://blog.csdn.net/zxyvb/arti ...

  5. LINUX安装SVN+添加自动同步+远程下载最新代码

    LINUX安装SVN+添加自动同步+远程下载最新代码---------------------1. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作--------------- ...

  6. blfs(systemd版本)学习笔记-安装lrzsz软件包实现ssh远程传输文件到lfs系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 安装lrzsz软件包实现ssh远程传输文件到lfs系统 这个软件包在lfs系列的书中没有,这里是参照lrzsz官网的说明进行编译 ...

  7. VMware虚拟机里centos7下安装mysql5.6并授权远程连接Navicat

    这节来安装Mysql5.6,并远程授权连接本地windows的Navicat,可以根据以下步骤安装.此文章为自己收藏,必要时拿出来直接用的,有需要的友友可以查看查看的.文章图片有借助于网络的. 1.新 ...

  8. 安装xampp之后如何建立远程登录用户并修改登录方式和密码

    其实xampp作为开发环是非常好用的,但是很少人将其用作生产环境,主要还是它的安全性较低,很多默认设置都存在安全漏洞,但是实际上使用xampp在Linux下面进行配置确实是很节省时间的一件事(如果你的 ...

  9. [转帖]Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接

    Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接 https://blog.csdn.net/networken/article/details/88938304 转帖 ...

随机推荐

  1. 菜鸟学步之 爆破AspriseOCR 4.0

    最近写一个小程序要用到OCR控件,在网上查了一下,据说AspriseOCR 4.0效果不错.试用了一下发现的确还行,不过就是要注册,试用版本每次都会弹出讨厌的对话框来.网上看到有一篇“新人报道–处女破 ...

  2. 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[1] (转)

    Index Data Author: David Smiley Eric Pugh 译者:Koala++ / 屈伟 在这一章中我们将了解如何将数据传入Solr.这个传入的过程称之为索引,尽管中间还包含 ...

  3. libnids

    一.简介 libnids的英文意思是 Network Intrusion Detect System library,即网络入侵监测系统函数库.它是在前面介绍的两种C函数接口库libnet和libpc ...

  4. Focal Loss(RetinaNet) 与 OHEM

    Focal Loss for Dense Object Detection-RetinaNet YOLO和SSD可以算one-stage算法里的佼佼者,加上R-CNN系列算法,这几种算法可以说是目标检 ...

  5. tensorflow_python中文手册

    https://www.tensorflow.org/api_docs/python/tf/nn/static_bidirectional_rnn https://www.w3cschool.cn/t ...

  6. 转:PCA的Python实现

    http://blog.csdn.net/jerr__y/article/details/53188573 本文主要参考下面的文章,文中的代码基本是把第二篇文章的代码手写实现了一下. - pca讲解: ...

  7. 【中文分词系列】 4. 基于双向LSTM的seq2seq字标注

    http://spaces.ac.cn/archives/3924/ 关于字标注法 上一篇文章谈到了分词的字标注法.要注意字标注法是很有潜力的,要不然它也不会在公开测试中取得最优的成绩了.在我看来,字 ...

  8. 强化Linux安全的10个技能

    1.找出不必要的服务 很明显,服务器上跑的服务,并不是每个都有用的.强烈建议检查并关掉不需要的服务,从而减少风险(多跑一个服务,就可能多几个漏洞). 查询运行在runlevel 3的服务列表: [af ...

  9. ASP入门(六)-Response对象

    Response对象可以从服务器向用户发送输出的结果. Response几种常用方法 方法 描述 BinaryWrite 向浏览器输出二进制的内容 Clear 清除已经缓冲的HTML输出 End 停止 ...

  10. android中XRecyclerView控件的使用

    控件的地址:https://github.com/XRecyclerView/XRecyclerView XRecyclerView控件是一个加强版的RecyclerView,可以很方便的实现下拉刷新 ...