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

JConsole 在 Linux 上的使用

JConsole 在 Linux 上的使用指南

1. 启动 JConsole 远程监控 Linux 服务器上的 JVM 进程

1.1 修改 JMX 配置,允许远程访问

Linux 服务器 启动 Java 应用时,需要加上 -Djava.rmi.server.hostname=<服务器IP>,完整的启动参数如下:

java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9010 \
     -Dcom.sun.management.jmxremote.rmi.port=9010 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Djava.rmi.server.hostname=你的服务器IP \
     -jar your-app.jar

参数说明:

  • -Djava.rmi.server.hostname=你的服务器IP:指定 JMX 监听的 IP 地址,必须是服务器的外网/内网 IP,否则无法远程连接。
  • -Dcom.sun.management.jmxremote.rmi.port=9010:显式指定 RMI 端口,避免 RMI 端口随机化。

1.2 允许防火墙放行端口

如果你的服务器有 防火墙,需要放行 9010 端口:

# Ubuntu/Debian
sudo ufw allow 9010

# CentOS
sudo firewall-cmd --add-port=9010/tcp --permanent
sudo firewall-cmd --reload

1.3 在本地 Windows/Mac 连接

本地电脑(Windows/Mac) 上运行:

jconsole 你的服务器IP:9010

如果 JMX 正常工作,你会看到 Java 进程的监控界面。

1.4 使用 SSH 端口转发(更安全)

如果你不想直接暴露 9010 端口,可以使用 SSH 端口转发

ssh -L 9010:localhost:9010 user@你的服务器IP

然后在本地运行:

jconsole localhost:9010

这样,远程服务器的 9010 端口被映射到本地,避免安全风险。


最后结果如下:
在这里插入图片描述

2. JConsole 监控的 JVM 指标和图表

JConsole 连接 Java 进程后,会展示 JVM 运行状态的多个图表和指标,主要包括以下几个部分:

2.1 概述(Overview)

  • CPU 使用率(折线图)
  • 线程(Threads) 数量变化
  • 堆内存(Heap Memory Usage)(折线图)
  • 类加载(Classes) 统计

2.2 内存(Memory)

  • 堆(Heap)
    • Eden Space(伊甸区):新对象存放,GC 频繁。
    • Survivor Space(幸存者区):存活的对象从 Eden 复制到这里。
    • Old Gen(老年代):长期存活的对象存放区域。
  • 非堆(Non-Heap)
    • Metaspace(元空间):存放类元数据。
    • Code Cache(代码缓存区):存储 JIT 编译后的本地代码。

在这里插入图片描述

2.3 线程(Threads)

  • 线程状态统计
  • 线程堆栈(Thread Dump)

在这里插入图片描述

2.4 GC(Garbage Collection)

  • GC 次数和耗时(折线图)
    • Minor GC(年轻代 GC)
    • Major GC / Full GC(老年代 GC)

3. JDK 11 的 JVM 内存结构

3.1 堆(Heap)

  • 年轻代(Young Gen)
    • Eden 区:新对象存放,触发 Minor GC。
    • Survivor 区(S0/S1):存活对象从 Eden 复制到 Survivor 区。
  • 老年代(Old Gen)
    • 存放长期存活的对象,触发 Full GC。

3.2 非堆(Non-Heap)

  • Metaspace(元空间):JDK 8 移除了永久代(PermGen),改用 Metaspace 存放类元数据。
  • Code Cache(代码缓存区):存放 JIT 编译后的机器码。

3.3 线程栈(Thread Stack)

  • 栈帧(Stack Frame):存放方法调用的局部变量、操作数栈等。
  • 本地方法栈(Native Stack):存放 JNI 方法。

3.4 直接内存(Direct Memory)

  • ByteBuffer.allocateDirect() 申请,避免堆内存复制,提高 IO 性能。

相关文章:

  • [CISSP] [1] 访问控制//入侵检测与网络防护
  • mysql多实例及单实例安装脚本
  • Android 11.0 监听某个app启动或者退出功能实现
  • 基于SpringBoot实现旅游酒店平台功能十一
  • 如何修改桌面图标——文件夹图标(Windows 10)
  • 金融行业替换传统的FTP传输系统的必要性
  • TCP协议支持全双工原因TCP发送接收数据是生产者消费者模型
  • 【RAG文档处理】文档加载模块:连接数据与智能应用的桥梁
  • 关于我和快速幂的事()
  • CF576A Vasya and Petya‘s Game 题解
  • Day15:二叉树的后续遍历序列
  • DeepSeek刷力扣辅助题单 存留记录
  • C++中的const与类型转换艺术
  • Json 转义符号处理(Mongo changeStream op log)
  • SAP访问外围系统(http/https)
  • Android笔记:Android平台下SVG格式的解析与实践
  • ardunio R4 WiFi连接实战
  • 《Transformer如何进行图像分类:从新手到入门》
  • 人工智能基础知识笔记四:聚类分析
  • HOT100——二叉树篇Leetcode236. 二叉树的最近公共祖先
  • 潍坊营销型网站制作/深圳排名seo
  • 网站个别页面做seo/十大场景营销案例
  • 新手如何做网站的教程/营销方案怎么写
  • 网站文章发布/b站怎么推广
  • 三乡有做网站的师傅吗/国内免费ip地址
  • html5网站开发书籍/东莞网站推广优化网站