IDEA安装使用 VisualVM 及VisualVM 远程监视
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 远程监视的更多相关文章
- VisualVM通过ssl远程连接JVM
VisualVM通过密码连接JVM实例如下 https://www.cnblogs.com/qq931399960/p/10960573.html 虽然设置了密码,但还是不够安全,只要获取到密码,在任 ...
- 远程监视jboss应用java内存的配置
前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...
- 远程监视jboss应用java内存的配置(实测) .
前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...
- 安装好mysql后允许远程连接
安装好mysql后允许远程连接 http://blog.sina.com.cn/s/blog_3eba8f1c0100tsox.html http://blog.csdn.net/zxyvb/arti ...
- LINUX安装SVN+添加自动同步+远程下载最新代码
LINUX安装SVN+添加自动同步+远程下载最新代码---------------------1. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作--------------- ...
- blfs(systemd版本)学习笔记-安装lrzsz软件包实现ssh远程传输文件到lfs系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 安装lrzsz软件包实现ssh远程传输文件到lfs系统 这个软件包在lfs系列的书中没有,这里是参照lrzsz官网的说明进行编译 ...
- VMware虚拟机里centos7下安装mysql5.6并授权远程连接Navicat
这节来安装Mysql5.6,并远程授权连接本地windows的Navicat,可以根据以下步骤安装.此文章为自己收藏,必要时拿出来直接用的,有需要的友友可以查看查看的.文章图片有借助于网络的. 1.新 ...
- 安装xampp之后如何建立远程登录用户并修改登录方式和密码
其实xampp作为开发环是非常好用的,但是很少人将其用作生产环境,主要还是它的安全性较低,很多默认设置都存在安全漏洞,但是实际上使用xampp在Linux下面进行配置确实是很节省时间的一件事(如果你的 ...
- [转帖]Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接
Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接 https://blog.csdn.net/networken/article/details/88938304 转帖 ...
随机推荐
- lazarus汉化
启动Lazarus IDE,点击菜单栏中的Environment,再点击Options选项 在弹出的IDE选项框内,点选左侧Environment下的Desktop子选项,将Language设为Chi ...
- NLP的一些学习资料
结巴分词和NLTK----一套中文文本分析的组合拳 https://www.jianshu.com/p/aea87adee163 比较好的情感分析的文章 https://www.cnblogs.com ...
- 第一个手写Win32窗口程序
第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...
- Spark的动态资源分配
跑spark程序的时候,公司服务器需要排队等资源,参考一些设置,之前不知道,跑的很慢,懂得设置之后简直直接起飞. 简单粗暴上设置代码: def conf(self): conf = super(Tbt ...
- SPARK:作业基本运行原理
Spark作业基本运行原理: 我们使用spark-submit提交一个spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使用的部署模式(deploy-mode)不同:1)Drive ...
- 云服务器 ECS Linux Ubuntu 主机修改主机名
云服务器 ECS Linux 主机修改主机名 修改云服务器 ECS Linux 主机名常见的有两种方式,本文对此进行概要说明. 临时生效修改 使用命令行修改 hostname 主机名(可自定义),重新 ...
- Flask调试
1.AttributeError: 'NoneType' object has no attribute 'app' 原因:直接在py中调用视图函数,但没有上下文,导致出错 2.不转换html代码 { ...
- 解决jetty runner锁定js
在web.xml中添加 <servlet> <!-- Override init parameter to avoid nasty --> <!-- file locki ...
- JavaScript 从闭包可以做什么开始,将有助于理解闭包
本文内容 函数内部访问全局变量 函数外部不能直接访问局部变量 函数外部访问局部变量 保护私有成员 持久性 模块化 抽象性 闭包是 JavaScript 的重要特性,非常强大,可用于执行复杂的计算,可并 ...
- Redis问题MISCONF Redis is configured to save RDB snapshots....
Redis问题MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on di ...