通过visualVM远程监控java进程

2024-06-22 20:28

本文主要是介绍通过visualVM远程监控java进程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. VisualVM 简介及功能介绍

VisualVM 是一个功能强大的工具,用于监视、分析、配置和调试 Java 应用程序的运行状态。它提供了丰富的功能来帮助开发者和运维人员理解和优化 Java 应用程序的性能。VisualVM 集成了多种 JDK 工具,并通过直观的 GUI 界面提供对 Java 虚拟机(JVM)的深入分析, 可以连接到本地和远程的 JVM 实例,并提供有关应用程序运行时状态、内存使用情况、线程活动等的详细信息。

2. Visual功能

2.1 监视和管理 JVM:

  • 概览:提供 Java 应用程序的基本信息,包括 JVM 参数、类加载器、系统属性等。
  • 监视:实时监视 CPU、内存、线程和类加载器的使用情况,帮助识别性能瓶颈。

2.2 内存分析:

  • 堆转储:生成和分析堆转储,帮助检测内存泄漏和查看对象的分配情况。
  • GC 活动:查看垃圾收集活动的详细信息,帮助优化垃圾收集器的性能。

2.3 线程分析:

  • 线程转储:捕获线程转储,查看线程的状态和调用堆栈,帮助解决线程争用和死锁问题。
  • 线程监视:实时监视线程的活动,了解线程的执行情况和状态变化。

2.4 CPU 分析:

  • 性能分析:使用采样和探查器分析应用程序的 CPU 使用情况,识别性能瓶颈和高耗时的方法。
  • 热点分析:确定应用程序中最耗费 CPU 资源的部分,优化代码性能。

2.5 远程监控:

  • JMX 集成:通过 JMX(Java Management Extensions)连接和监视远程 JVM 实例,查看和管理远程应用程序的运行时状态。
  • 远程诊断:对远程应用程序进行性能分析和诊断,无需在目标服务器上安装额外的软件。

插件支持:

  • 可扩展性:支持通过插件扩展功能,用户可以根据需要安装和配置各种插件,以增加额外的分析工具和功能。

3. VisualVM使用及配置

3.1 下载对应的visualVM版本

进入官网下载对应的visualVM版本,并解压到本地,可以在bin目录下找到运营的exe文件。

3.2 远程启动启用 JMX(Java Management Extensions)远程管理

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8777 -Dcom.sun.management.jmxremote.local.only=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.rmi.port=8777 -Djava.rmi.server.hostname=demo -jar demo.jar
  1. -Dcom.sun.management.jmxremote
    启用 JMX 远程管理和监控功能。这是一个启用 JMX 远程连接的开关。

  2. -Dcom.sun.management.jmxremote.port=8777
    指定 JMX 远程连接使用的端口号。这里设置为 8777。

  3. -Dcom.sun.management.jmxremote.local.only=true
    限制 JMX 连接仅限于本地连接,即只允许从同一台机器进行 JMX 连接。这是一个安全设置,防止远程连接。

  4. -Dcom.sun.management.jmxremote.authenticate=false
    禁用 JMX 连接的身份验证。默认情况下,JMX 连接是需要身份验证的,禁用身份验证会降低安全性,不建议在生产环境中使用。

  5. -Dcom.sun.management.jmxremote.ssl=false
    禁用 JMX 连接的 SSL 加密。默认情况下,JMX 连接是通过 SSL 加密的,禁用 SSL 会降低安全性,不建议在生产环境中使用。

  6. -Dcom.sun.management.jmxremote.rmi.port=8777
    指定 RMI(Remote Method Invocation)连接使用的端口号。这里设置为 8777。这个端口用于 RMI 远程对象的连接。

  7. -Djava.rmi.server.hostname=demo
    设置 RMI 服务器的主机名为 demo。这指定了远程客户端在连接时应使用的主机名。

  8. -jar demo.jar
    指定要运行的 Java 应用程序的 JAR 文件,这里是 demo.jar。-jar 选项告诉 Java 虚拟机从指定的 JAR 文件中启动应用程序。

安全性提醒

  • 本地连接:-Dcom.sun.management.jmxremote.local.only=true 限制为本地连接,是一种安全措施,防止远程连接。
  • 禁用身份验证和 SSL:-Dcom.sun.management.jmxremote.authenticate=false 和 -Dcom.sun.management.jmxremote.ssl=false 禁用身份验证和 SSL 加密,会降低安全性,通常只在开发或测试环境中使用。在生产环境中应启用身份验证和 SSL,以确保安全。

这些参数配置允许您在开发或测试过程中方便地使用 JMX 进行监控和管理,但在生产环境中使用时,请确保启用必要的安全措施。

3.3 配置jstatd并启动

3.3.1 权限配置文件jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;
};

3.3.2 启动jstatd服务

jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.hostname=demo &

如果要开启日志,可以加上参数:
-J-Djava.rmi.server.logCalls=true
注意:RMI服务器主机名应和JMX远程管理服务保持一致。

3.3.3 开放端口访问权限

启动后可以使用以下命令检查是否启动完成;
ps -aux | grep jstatd – 查看jstatd进程服务
netstat -antup|grep jstatd --查看启动的端口
在这里插入图片描述
通过上图发现,除了jstatd的默认端口1099外,还有一个随机端口号36629,这两个端口我们都需要在防火墙或者安全组中开启访问权限。

3.4 启动visualVM

启动visualVM,并添加以下两个连接:
在这里插入图片描述

4. 使用 VisualVM 的场景

  • 性能调优:通过详细的性能分析工具,识别并优化应用程序的性能瓶颈。
  • 内存管理:分析堆转储,检测内存泄漏,优化内存使用。
  • 线程诊断:捕获和分析线程转储,解决线程争用和死锁问题。
  • 实时监控:实时监视应用程序的运行状态,及时发现和解决性能问题。
  • 远程管理:通过 JMX 和其他远程监控功能,管理和监视远程部署的应用程序。

5. 总结

VisualVM 是一个全面且易用的工具,适用于 Java 应用程序的性能监控和分析。它结合了多种分析工具和功能,为开发者和运维人员提供了一个强大的平台,以确保 Java 应用程序的高效运行和稳定性。

这篇关于通过visualVM远程监控java进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085322

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让