jconsole

返回 JDK 工具

jconsole 是 JDK 内置的图形化 JMX 监控工具,无需额外配置即可连接本地或远程 JVM,实时查看堆内存、线程、GC、MBean 等运行状态。


启动

# 直接启动,弹出连接界面
jconsole
 
# 直接连接指定进程(pid)
jconsole <pid>
 
# 连接远程 JMX 服务
jconsole host:port
 
# 禁用 SSL(连接不支持 SSL 的远程 JVM 时使用)
jconsole -J-Djava.net.ssl.trustStore=... host:port

远程 JVM 配置

目标 JVM 需在启动时开放 JMX 端口:

java \
  -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9090 \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -jar app.jar

生产环境应开启认证(authenticate=true)并配置 jmxremote.password 文件,避免未授权访问。


监控面板

面板内容
概览CPU 使用率、堆内存、线程数、类加载数实时折线图
内存各内存区域(Eden、Old、Metaspace 等)使用量,可手动触发 GC
线程所有线程列表、状态、栈帧,支持死锁检测
已加载/卸载类数量趋势
VM 概要JVM 参数、系统属性
MBean浏览和操作所有已注册的 MBean(含自定义 MBean)

死锁检测

线程 面板底部点击 检测死锁,jconsole 会调用 ThreadMXBean.findDeadlockedThreads() 并高亮显示死锁线程链。

命令行等价操作参见 jstack(适合无 GUI 的服务器环境)。


MBean 操作示例

通过 MBean 面板可以:

  • 读取/修改 MBean 属性(如动态调整日志级别)
  • 调用 MBean 操作(如 gc()dumpHeap()
  • 订阅 MBean 通知

常用内置 MBean:

MBean用途
java.lang:type=Memory堆/非堆内存使用
java.lang:type=Threading线程信息与死锁检测
java.lang:type=GarbageCollector,name=*GC 统计
java.lang:type=ClassLoading类加载统计
java.lang:type=RuntimeJVM 启动参数

局限性与替代

场景建议
无图形界面的服务器使用 jcmd 命令行替代
需要线程快照使用 jstack
需要详细 GC 日志分析配置 -Xlog:gc* 结合 GCEasy 等工具
需要持续性能录制使用 Java Flight Recorder(jfr
功能更丰富的 GUI使用 VisualVM 或 JMC(Java Mission Control)

相关链接

  • jcmd — 命令行版诊断工具,功能覆盖 jconsole 大部分能力
  • jstack — 专用线程快照与死锁分析
  • JVM — 内存结构与 GC 背景知识
  • JUC — 线程状态与死锁原理