基于JVisualVM的可视化监控

监控本地的java进程

本小节我们介绍一下如何使用JDK自带的jvisualvm工具来监控本地的Java进程,该工具是一个图形化的监控工具。
jvisualvm官方文档地址如下:
https://visualvm.github.io/documentation.html

一、介绍

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).

从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。Monitor界面则是监控Java堆大小,Permgen大小,Classes和线程数量。jdk不同版本中界面会不太一致,如有的含cpu监控,有的则不含(jdk1.6.0_10未包含)。

二、JVisualVM能做什么

VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。
三、jvisualvm在哪
jvisualvm位于JAVA_HOME/bin目录下,如下图:
在这里插入图片描述
直接双击就可以打开该程序,打开后界面如下:
在这里插入图片描述
如果只是监控本地的java进程,是不需要配置参数的,直接打开就能够进行监控。首先我们需要在本地打开一个Java程序,例如我打开IDEA,这时在jvisualvm界面就可以看到与IDEA相关的Java进程了:
在这里插入图片描述
点击一个进程,就可以看到该进程的概述信息,该进程的JVM参数以及系统属性等信息都能够查看到:
在这里插入图片描述
如果只是监控本地的java进程,是不需要配置参数的,直接打开就能够进行监控。首先我们需要在本地打开一个Java程序,例如我打开IDEA,这时在jvisualvm界面就可以看到与IDEA相关的Java进程了:
在这里插入图片描述
点击一个进程,就可以看到该进程的概述信息,该进程的JVM参数以及系统属性等信息都能够查看到:
在这里插入图片描述
点击 “监视” 就能够看到CPU、内存、类以及线程的活动状况,点击右上角的 “堆Dump” 就能够导出内存映像文件:
在这里插入图片描述
除了导出,也还可以导入内存映像文件,只不过分析功能上没有MAT强大:
在这里插入图片描述
点击 “线程” 就能够看到该进程内部的所有线程,以及线程的运行状况等信息。如果点击右上角的 “线程Dump” 就会导出一个内容与jstack打印内容一致的文件:
在这里插入图片描述
点击 “抽样器” 界面中的 “CPU ” 就可以动态的看到每个方法的执行时间,当我们的代码执行的比较慢了,就可以通过抽样器来查看是哪一个方法执行的比较慢:
在这里插入图片描述
而点击 “内存” 的话,就可以实时的、动态的查看到每个类实例对象的数量以及这些实例所占用的内存大小:
在这里插入图片描述
在Profiler界面上,可以对CPU、内存进行性能分析,分析后会给出分析结果:
在这里插入图片描述

接下来我们下载两个比较实用的插件,首先到VisualVM插件中心,地址如下:
https://visualvm.github.io/pluginscenters.html
因为有时候自带的插件地址可能无法使用,所以我们需要自行配置可用的地址:
在这里插入图片描述
回到jvisualvm中,点击菜单栏中的 “工具“ 选项,再点击子菜单的 ”插件“ 选项:
在这里插入图片描述
然后按照下图配置插件地址:
https://visualvm.github.io/archive/uc/8u40/updates.xml.gz
在这里插入图片描述
配置好插件地址后,按照下图勾选以下两个插件:
在这里插入图片描述
按照提示一步步的进行安装:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插件安装完成后需要重启jvisualvm才会生效,这时会看到选项卡中多了一个 “Visual GC” 选项,点击该选项后,可以动态的查看到JVM内存结构各个区域的运行状况,极大方便我们进行各个区内存的监控及调优:
在这里插入图片描述
另一个插件的作用就是可以让我们针对某个进程编写BTrace脚本,右键点击一个进程,在弹出来的菜单中,选择“Trace application…”,就可以编写BTrace脚本了:
在这里插入图片描述

监控远程的java进程
在上一小节中,我们简单介绍了如何使用JDK自带的jvisualvm工具来监控本地的Java进程。而本小节我们将介绍一下如何使用jvisualvm来监控远程的java进程,我们这里以线上服务器的Tomcat为例。

打开jvisualvm,双击 “远程” 选项,添加一个远程主机,即远程的服务器:
在这里插入图片描述
然后编辑Tomcat的catalina.sh文件,在该文件中加入如下配置内容:
[root@server ~]#

vim /home/tomcat/apache-tomcat-8.5.8/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=119.23.250.83"

配置简单说明:
-Dcom.sun.management.jmxremote添加一个jmx远程连接属性
-Dcom.sun.management.jmxremote.port=9004 指定连接的端口号
-Dcom.sun.management.jmxremote.authenticate=false 是否启用验证
-Dcom.sun.management.jmxremote.ssl=false 是否启用ssl
Djava.net.preferIPv4Stack=true 是否优先使用ipv4
-Djava.rmi.server.hostname=119.23.250.83 指定远程主机的ip地址
如下图:
在这里插入图片描述
增加完配置后,重启Tomcat,查看是否有9004端口,有的话就代表配置成功了,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意,如果你使用的是阿里云等云服务器的话,不仅需要配置防火墙规则来开放端口,还需要到云服务器的安全组规则中,增加相应的端口规则,如下:
在这里插入图片描述
连接成功后,如下:
在这里插入图片描述
同样的,可以像监控本地进程一样,监控远程的进程,在界面的操作上是一模一样的。唯一不同的也就是需要添加一个远程主机,然后到远程的Java进程上配置一些jmx参数而已:
在这里插入图片描述
以上我们是以Tomcat这种服务型的进程作为一个示例,只需要去配置Tomcat的脚本文件就可以了。那么如果我们需要监控的是自己线上跑的一个Java进程需要怎么进行配置呢?其实也是一样的,同样的是使用这些参数,只不过是作为启动参数而已,在启动项目的时候加上即可,如下:
[root@server ~]#

nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=119.23.250.83 -jar monitor_tuning-0.0.1-SNAPSHOT.jar &

成功启动后,也是使用同样的方式进行连接,注意端口不要弄错了:
在这里插入图片描述
连接成功后也是一样的:
在这里插入图片描述
然后我们就可以愉快的在本地监控远程的Java进程了,而且还是图形化的,免去了敲命令的烦恼。
我们来做一个堆内存溢出的实验,看看jvisualvm能否监控到内存的变化,在浏览器上访问我们之前在基于JDK命令行工具的监控一文中所编写的/head接口。访问后如下,可以看到堆内存的变化很激烈,利用jvisualvm工具进行监控,就很明显的就能够观察到该进程的异常:
在这里插入图片描述
所以线上监控不能少,是我们必须要掌握的一种技能。监控相当于我们的眼睛,如果没有监控工具,那我们就相当于瞎子一样两眼一抹黑。无法看到内存、线程的使用情况,当出现异常的时候,也难以定位问题发生的原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

要闻君说:华为发布2018年年度报告:全球销售收入超千亿美元;微软”立誓“不过愚人节;大众与AWS一起做工业汽车云...

关注并标星星CSDN云计算每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 三位深度学习之父同获2018年图灵奖(图片来源网络)【3月29日 星期三】云の声音华为计划在英国剑桥大学建设芯片工厂,占地500英亩,在爱…

Windows OpenGL ES 波浪特效

目录 一.OpenGL ES 波浪特效效果演示 1.原始图片2.效果演示 二.OpenGL ES 波浪特效源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 …

jmap+MAT实战内存溢出

一、堆区和非堆区 前言: 如果发生内存溢出,主要是通过内存映像文件,来查看到底是那些类,一直在占有没有释放。 1.1 情况分析: 第一种内存溢出:有可能内存泄漏 第二种内存溢出:也有可能内存分…

Git 中文详细安装教程01(安装篇)

git官网:https://git-scm.com/ Step 1 Information Please read the following important information before continuing 继续之前,请阅读以下重要信息 Step 2 Select Destination Location 选择安装位置 Step 3 Select Components 选择组件 Step 4…

Windows OpenGL 波浪特效

目录 一.OpenGL 波浪特效效果演示 1.原始图片2.效果演示 二.OpenGL 波浪特效源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL…

阿里带火的中台,究竟是个啥?

戳蓝字“CSDN云计算”关注我们哦!来源:CIO发展中心中台这个概念早期是由美军的作战体系演化而来的,技术上所说的“中台”主要是指学习这种高效、灵活和强大的指挥作战体系。电商经过十几年的发展,组织已经庞大而复杂,业…

OpenGL 亮度调节

目录 一.OpenGL 亮度调节效果演示 1.IOS 演示效果2.Windows OpenGL ES 演示效果3.Windows OpenGL 演示效果 二.OpenGL 亮度调节源码下载 1.IOS Object-C 版本2.Windows OpenGL ES 版本3.Windows OpenGL 版本 三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 …

云漫圈 | 写给对 ”游戏开发” 感兴趣的朋友们

戳蓝字“CSDN云计算”关注我们哦!作者:小灰转自:程序员小灰我们程序员能为世界带来什么?有些程序员做出了 淘宝/Amazon,为世界带来了电子商务。有些程序员做出了 微信/Twitter,为世界带来了社交平台。而有些…

git下载安装、验证、企业实战单机、多人协作

此课程会划分为10个小结进行讲述 1 安装和配置2 创建仓库3 基本用法4 三种状态5 标签 tag6 分支 branch7 合并分支8 远程仓库9 如何多人远程合作 git下载安装验证 一、下载、安装、验证 1、git官网: https://git-scm.com/downloads 2、安装及配置 2-1 一路下一步…

Qt中线程的使用1

初学Qt线程,此实例只是对Qt单一线程的使用,另外结合信号槽实现ui界面与子线程之间数据的传输,可以解决线程在运行的过程中,关闭对话框程序崩溃的问题。此实例要实现的效果图如下: 界面控件的类,对象表如下…

Linux CentOS 6.8 安装 Docker

Linux CentOS 6.8 安装 Docker 一、移除Docker yum remove docker二、移除 Docker-selinux yum remove docker-selinux 三、修改Docker镜像配置文件 rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm四、安装Docker yum update -y …

爬取了10W条数据,我们整理出了这份北上广深租房图鉴

戳蓝字“CSDN云计算”关注我们哦!作者:AlfredWu 转自: Alfred数据室俗话说“金三银四”,又到了春招换工作、乃至换城市的时候了。这对于“回望楼价又一年”的小伙伴们来说,也意味着又到了搬家换房子的时候了。北上广深…

Windows OpenGL 图像亮度调节

目录 一.OpenGL 图像亮度调节 1.原始图片2.效果演示 二.OpenGL 图像亮度调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL…

Qt下继承于QObject创建的线程

Qt线程线程创建方法示例线程创建方法 Qt下创建线程的方法有两种: 一种是通过继承QThread,并重写run()函数,在run()函数中,编写线程所做的事情,在需要线程的文件中&#…

入门篇|学渣是如何自学数据结构的?

戳蓝字“CSDN云计算”关注我们哦!作者 | 小鹿来源 | 一个不甘平凡的码农写在前边-------------------------------------------今天呢,我想简单的分享一下半年来自学数据结构与算法学习方法和技巧。写这篇文章主要目的还是重在让刚刚接触数据结构的读者…

Qt下简单的文件读取

此示例只是一个简单的文件的打开&#xff0c;读取&#xff0c;文件内容的加载&#xff0c;望共勉。 界面效果展示 代码实现 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>namespace Ui { class Dialog; }class Dialog : public QDialog {Q_OBJECTpub…

趣挨踢 | 用大数据扒一扒蔡徐坤的真假流量粉

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;AlfredWu 转自&#xff1a; Alfred数据室前段时间央视新闻公开披露流量明星数据造假。作为一名数据猿&#xff0c;我们秉着好奇心点开了NBA新春贺岁形象大使蔡徐坤的微博&#xff0c;发现他的微博转发量除了最新一条…

Windows OpenGL ES 图像曝光度调节

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场 零基础 OpenGL ES 学习路线推荐…

C++中析构函数

析构函数&#xff1a; 1.析构函数不能被重载&#xff1b; 2.析构函数可以是虚函数&#xff1b; 3.析构函数没有参数&#xff0c;没有返回值&#xff1b; 4.当类对象的生命周期结束&#xff0c;系统会自动调用析构函数&#xff1b; 5.若没有显式的析构函数&#xff0c;系统会调用…