当前位置: 首页 > news >正文

VisualVM监控远程Linux的java进程

在Linux中使用VisualVM连接远程Java进程需要进行以下配置,涉及远程JMX(Java Management Extensions)的启用和安全设置。以下是详细步骤:

一、远程Java进程配置(目标服务器)

1. 启用JMX远程访问

在启动Java应用时添加以下JVM参数:

java -Dcom.sun.management.jmxremote \-Dcom.sun.management.jmxremote.port=9010 \  # JMX监听端口-Dcom.sun.management.jmxremote.authenticate=false \  # 禁用认证(测试环境)-Dcom.sun.management.jmxremote.ssl=false \  # 禁用SSL-Djava.rmi.server.hostname=192.168.1.100 \  # 服务器IP地址-jar yourApplication.jar
2. 生产环境安全配置(推荐)
java -Dcom.sun.management.jmxremote \-Dcom.sun.management.jmxremote.port=9010 \-Dcom.sun.management.jmxremote.authenticate=true \-Dcom.sun.management.jmxremote.ssl=false \-Dcom.sun.management.jmxremote.password.file=/path/to/jmx.password \-Dcom.sun.management.jmxremote.access.file=/path/to/jmx.access \-Djava.rmi.server.hostname=192.168.1.100 \-jar yourApplication.jar
3. 创建认证文件
# 创建密码文件(chmod 600确保安全)
echo "monitorRole QED" > jmx.password  # 只读用户
echo "controlRole R&D" >> jmx.password  # 读写用户# 创建访问权限文件
echo "monitorRole readonly" > jmx.access
echo "controlRole readwrite" >> jmx.access# 修改文件权限
chmod 600 jmx.password jmx.access

二、本地VisualVM配置(客户端)

1. 启动VisualVM

在本地机器(Windows/macOS/Linux)上启动VisualVM:

jvisualvm  # 命令行启动(需安装JDK)
2. 添加远程主机
  • 打开VisualVM,右键点击"远程" → “添加远程主机”
  • 输入远程服务器IP地址(如192.168.1.100)并确定
3. 添加JMX连接
  • 右键点击刚添加的远程主机 → “添加JMX连接”
  • 输入JMX端口(如9010
  • 若启用了认证,勾选"需要用户名和密码"并输入相应信息
  • 点击"确定"完成连接

三、防火墙配置(远程服务器)

确保服务器防火墙开放JMX端口(默认9010):

# CentOS/RHEL防火墙配置
sudo firewall-cmd --zone=public --add-port=9010/tcp --permanent
sudo firewall-cmd --reload# Ubuntu/Debian防火墙配置
sudo ufw allow 9010/tcp

四、高级配置(使用SSL和JMX代理)

1. 使用SSL加密通信

生成SSL证书并配置JVM参数:

# 生成密钥库
keytool -genkey -alias jmx -keyalg RSA -keystore jmx.keystore# 添加JVM参数
java -Dcom.sun.management.jmxremote.ssl=true \-Dcom.sun.management.jmxremote.ssl.need.client.auth=true \-Dcom.sun.management.jmxremote.registry.ssl=true \-Djavax.net.ssl.keyStore=/path/to/jmx.keystore \-Djavax.net.ssl.keyStorePassword=yourpassword \-Djavax.net.ssl.trustStore=/path/to/jmx.truststore \-Djavax.net.ssl.trustStorePassword=yourpassword \...
2. 使用JMX代理(绕过防火墙限制)

通过SSH隧道转发JMX端口:

# 本地执行(建立SSH隧道)
ssh -L 9010:localhost:9010 user@192.168.1.100 -N# 在VisualVM中连接localhost:9010

五、常见问题排查

  1. 连接超时

    • 检查服务器防火墙是否开放JMX端口
    • 确认java.rmi.server.hostname设置正确
    • 使用telnet 192.168.1.100 9010测试网络连通性
  2. 认证失败

    • 检查密码文件权限是否为600
    • 确认用户名和密码正确
    • 检查access文件格式是否正确
  3. 无法查看详细信息

    • 确保Java进程有足够的权限(如使用root用户启动时需特殊配置)
    • 检查JVM参数是否正确配置

六、总结

  1. 基础配置
    启用JMX远程访问,禁用认证和SSL(测试环境)。

  2. 安全配置
    启用认证,配置密码文件和访问权限,推荐使用SSL加密。

  3. 连接步骤
    在VisualVM中添加远程主机 → 添加JMX连接 → 输入端口和认证信息。

  4. 高级选项
    使用SSH隧道或自定义JMX代理(如Apache MINA)提高安全性。

通过以上配置,可在本地VisualVM中实时监控远程Java进程的内存使用、线程状态、GC情况等关键指标。

http://www.lryc.cn/news/590571.html

相关文章:

  • 【SpringBoot】实战-开发接口-用户-注册
  • matlab的伯德图为何从360度显示?应如何修改解决?
  • 基于大数据的网络文学推荐分析系统的设计与实现【海量书籍、自动爬虫】
  • Redis1:高并发与微服务中的键值存储利器
  • mongodb操作巨鹿
  • DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级
  • Qt小组件 - 6 异步运行函数
  • Redis深度解析:从缓存到分布式系统的核心引擎
  • Java高并发编程(2)
  • beautiful-react-hooks库——入门实践常用hook详解
  • React之旅-09 useMemo,优化计算性能的利器
  • React 源码7:Lane、React和schedule优先级转换
  • WPF 多窗口分文件实现方案
  • 【MAC】nacos 2.5.1容器docker安装
  • QT——事件系统详解
  • 多语言json文件内\n换行不生效问题
  • React -自定义hooks - 封装双向数据绑定
  • React 中 props 的最常用用法精选+useContext
  • H3CNE综合实验之机器人
  • Antd中使用Table集成 react-resizable实现可伸缩列
  • PowerJob集群机器数为0问题
  • 深度剖析 TDMQ RabbitMQ 版经典队列底层存储机制
  • vue页面不销毁的情况下再返回,总是执行created,而不触发 activated
  • QOpenGLWidget自定义控件— 2D点云显示(支持平移、放缩、绘制网格)
  • SpringBoot集成Minio存储文件,开发图片上传等接口
  • 【c++深入系列】:万字详解list(附模拟实现的list源码)
  • 【Fedora 42】Linux内核升级后,鼠标滚轮失灵,libinput的锅?
  • 开源 python 应用 开发(六)网络爬虫
  • ubuntu中拷贝docker容器中的文件到宿主机
  • IKE学习笔记