使用 JConsole

JConsole (Java™ Monitoring and Management Console) 是一个图形工具,允许用户监视和管理 Java 应用程序的行为。

注: 由于 JConsole 使用大量系统资源,因此 Oracle 建议仅在开发环境中使用它来创建原型。 还建议使用远程监控将 JConsole 应用程序与所监控的平台隔离。

JConsole 工具以 java.lang.management API 为基础进行构建。 JConsole 将连接到运行在同一个工作站或远程工作站上的应用程序。 这些应用程序必须配置为允许访问。

当 JConsole 连接到 Java 应用程序时,它会报告有关该应用程序的信息。 详细信息包括内存使用情况、正在运行的线程和已装入类。 该数据将帮助您监控应用程序和 JVM 的行为。 该信息有助于了解性能问题、内存使用问题、挂起或死锁。

设置 JConsole 以监视 Java 应用程序

  1. 要监视的 Java 应用程序必须使用命令行选项启动,这些命令行选项使 JConsole 可从其他系统或其他用户访问。 JConsole 可以不使用这些选项连接到同一个系统上同一个用户所拥有的流程。 用于监控的最简单的选项集将显示在下例中:
    -Dcom.sun.management.jmxremote.port=<port number>
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    <port number> 的值必须是您系统上的可用端口。 在该示例中,authenticatessl 选项采用安全套接字层 (SSL) 来防止密码认证和加密。 使用这些选项允许 JConsole 或任何其他 JMX 代理程序连接到 Java 应用程序 (如果它有权访问指定的端口)。 这些非安全选项只能在开发或测试环境中使用。 有关配置安全选项的更多信息,请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/connectors.html
  2. 通过在命令行上输入 jconsole 来启动 JConsole。 您的路径必须包含 Java 安装的 bin 目录。
  3. 将打开 "JConsole 新建连接 " 对话框: 输入您在步骤 1中指定的主机名和端口号。 如果要在与 Java 应用程序相同的工作站上运行 JConsole ,请将主机名值保留为 localhost。 对于远程系统,请将主机字段值设置为工作站的主机名或 IP 地址。 如果使用了步骤 1中指定的选项,请将 用户名密码 字段留空。
  4. 单击 连接。 JConsole 将启动并显示摘要选项卡。

设置 JConsole 以监控自身

JConsole 可以监控自身。 此功能对于 Java 环境的简单故障诊断很有用。
  1. 通过在命令行上输入 jconsole 来启动 JConsole。 您的路径必须包含 SDK 的 bin 目录。
  2. 此时将打开 JConsole 新建连接 对话框: 在 远程进程 字段中输入 localhost:0
  3. 单击 连接。 这会启动 JConsole 并显示摘要选项卡。

使用 JConsole 监视 Java 应用程序

JConsole 摘要选项卡将显示有关已连接 JVM 的关键详细信息。 在此,您可以选择任何其他选项卡,查看特定方面的更多详细信息。 内存选项卡显示 JVM 中每个内存池的历史使用情况 - 最有用的是堆内存的使用情况。

您还可以通过单击执行 GC 按钮来请求执行垃圾回收。 您必须与之前所述的已禁用安全选项建立连接,或者被认证为控制用户。

线程选项卡显示当前正在运行的线程数及其标识列表。

单击线程标识会显示线程状态及其当前堆栈跟踪。

选项卡显示自应用程序启动后已装入类的当前数量,以及已装入和未装入类的数量。 选中详细输出复选框可以开启和关闭详细类装入输出,以查看客户端 JVM 中已装入类的列表。 该输出将显示在客户机 JVM 的 stderr 输出中。

通过 MBean 选项卡可以检查平台 MBean 的状态,该选项卡提供了与 JVM 有关的更多详细信息。 有关 MBean 和 J9 MXBean 扩展的更多信息,请参阅 Eclipse OpenJ9 文档的 语言管理界面 部分。

最后, VM 选项卡提供有关运行 Java 应用程序的环境的信息,包括任何 JVM 参数和当前类路径。

JConsole 故障诊断

JConsole 是 Swing 应用程序。 在要监视的 Java 应用程序所在的工作站上运行 JConsole 会影响 Java 应用程序的性能。 您可以使用 JConsole 连接到在远程工作站上运行的 JVM,以降低对应用程序性能的影响。

由于 JConsole 是 Java 应用程序,因此您可以通过启动 JConsole 的应用程序将其 Java 命令行选项以 –J作为前缀来传递这些选项。 例如,要更改 JConsole 使用的最大堆大小,请添加命令行选项 -J-Xmx<size>

JConsole 使用 Attach API 连接到应用程序,并且只能连接到其他 J9 虚拟机。 如果在使用 JConsole 监控远程应用程序时遇到问题,根本原因可能是 Attach API。 要诊断问题,请参阅 Java 连接 API

已知限制

使用本地进程列表
本地进程列表不起作用。 在 远程进程 文本输入字段中使用 localhost:<port> 以连接到本地 JVM。
“概述”选项卡中的 CPU 使用情况
CPU 使用情况显示不起作用。

更多信息

有关 JConsole 以及所显示值的定义的更多详细信息,请参阅 Oracle 文档中的 https://docs.oracle.com/javase/8/docs/technotes/guides/management/index.html