监控本地的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工具进行监控,就很明显的就能够观察到该进程的异常:

所以线上监控不能少,是我们必须要掌握的一种技能。监控相当于我们的眼睛,如果没有监控工具,那我们就相当于瞎子一样两眼一抹黑。无法看到内存、线程的使用情况,当出现异常的时候,也难以定位问题发生的原因。

基于JVisualVM的可视化监控相关推荐

  1. Java生产环境下性能监控与调优详解 第3章 基于JVisualVM的可视化监控

    第3章 基于JVisualVM的可视化监控 3-1 监控本地java进程 3-2 监控远程的java进程

  2. 基于Kibana的可视化监控报警插件 KAAE 的配置

    前言 可视化监控报警插件 KAAE:Kibi + Kibana Alert & Report App for Elasticsearch. 最近搭建了ELK系统,便想在此基础上做一个基于Kib ...

  3. 基于 HTML5 WebGL 的加油站 3D 可视化监控

    前言 随着数字化,工业互联网,物联网的发展,我国加油站正向有人值守,无人操作,远程控制的方向发展,传统的人工巡查方式逐渐转变为以自动化控制为主的在线监控方式,即采用数据采集与监控系统 SCADA.SC ...

  4. 基于 HTML5 WebGL 的计量站三维可视化监控系统 Web 组态工控应用

    前言 得益于 HTML5 WebGL 技术的成熟,从技术上对工控管理的可视化,数据可视化变得简单易行!完成对工控设备的管理效率,资源管理,风险管理等的大幅度提高,同时也对国家工业4.0计划作出有力响应 ...

  5. 基于 HTML5 的计量站三维可视化监控系统 Web 组态工控应用

    得益于 HTML5 WebGL 技术的成熟,从技术上对工控管理的可视化,数据可视化变得简单易行!完成对工控设备的管理效率,资源管理,风险管理等的大幅度提高,同时也对国家工业4.0计划作出有力响应! 如 ...

  6. html5 3d场景设计,基于 HTML5 WebGL 的加油站 3D 可视化监控

    前言 随着数字化,工业互联网,物联网的发展,我国加油站正向有人值守,无人操作,远程控制的方向发展,传统的人工巡查方式逐渐转变为以自动化控制为主的在线监控方式,即采用数据采集与监控系统 SCADA.SC ...

  7. 基于ELK搭建网站监控可视化

    搭建ELK网站浏览可视化监控前提安装 ElasticSearch 安装 和 kibana . logstash 安装 文章目录 ELK 网站流量可视化监控 工具 网站流量可视化监控配置 部署 Tomc ...

  8. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

  9. 基于 eBPF 的 prometheus 监控方案

    基于 eBPF 的 prometheus 监控方案 1. 前言 2. ebpf_exporter 环境搭建 3. Prometheus 与 Grafana 配置 4. ebpf_exporter 代码 ...

最新文章

  1. iptables规则备份和恢复,任务计划chkconfig工具systemd管理服务
  2. ppt结的概念与使用
  3. java 增量编译_java增量/全量编译接口应用
  4. js使用工具将表单封装成json字符串传到后台,js截取字符串(学生笔记)
  5. MSP430F5529 DriverLib 库函数学习笔记(七)定时器B
  6. 前端学习(3238):react生命周期4
  7. android点击运行后无法显示设备,Android仿真器除了黑屏外什么都不显示,adb设备显示“设备离线”...
  8. DoTween NGUI bug
  9. HDU 5514 Frogs (容斥原理)
  10. PHP 登录DEMO
  11. 计算机的编程发源地,计算机编程: C典型上机试题
  12. MIT 18.03 写给初学者的微积分校对活动 | ApacheCN
  13. 月薪23333元!淘宝招募“首席鉴雕官”,只需天天哈哈哈哈哈
  14. 2022年2月Python小屋编程比赛获奖名单
  15. sql server2008密钥
  16. java 汉字按拼音排序_Java当中汉字按照拼音排序
  17. 交换机cad图例_网络交换机cad图
  18. 修改dataV轮播表背景图
  19. 如何在Ubuntu18.4中设置ERPNEXT开源ERP生产环境开机运行
  20. 《高性能MySQL》阅读 -Mysql基本特性

热门文章

  1. PHP实现RPC(简版)
  2. 【转载保存】dubbo学习笔记
  3. 【Boost】Boost使用几条简单笔记
  4. 深入前端研发效能治理:数据化运营思路及其实践
  5. 一份关于机器学习端到端学习指南
  6. 阿里云护航罗振宇2018“时间的朋友”跨年演讲,与千万观众一起跨年 1
  7. Flutter Exception降到万分之几的秘密 1
  8. 蚂蚁金服金融级容器引擎实践之路
  9. 网络数据隐私保护,阿里工程师怎么做?
  10. 乱中有变,云原生从“大爆发”说起 | CSDN人物志