使用 JConsole
JConsole (Java™ Monitoring and Management Console) 是一个图形工具,允许用户监视和管理 Java 应用程序的行为。
JConsole 工具以 java.lang.management API 为基础进行构建。 JConsole 将连接到运行在同一个工作站或远程工作站上的应用程序。 这些应用程序必须配置为允许访问。
当 JConsole 连接到 Java 应用程序时,它会报告有关该应用程序的信息。 详细信息包括内存使用情况、正在运行的线程和已装入类。 该数据将帮助您监控应用程序和 JVM 的行为。 该信息有助于了解性能问题、内存使用问题、挂起或死锁。
设置 JConsole 以监视 Java 应用程序
- 要监视的 Java 应用程序必须使用命令行选项启动,这些命令行选项使 JConsole 可从其他系统或其他用户访问。 JConsole 可以不使用这些选项连接到同一个系统上同一个用户所拥有的流程。 用于监控的最简单的选项集将显示在下例中:
<port number> 的值必须是您系统上的可用端口。 在该示例中,authenticate 和 ssl 选项采用安全套接字层 (SSL) 来防止密码认证和加密。 使用这些选项允许 JConsole 或任何其他 JMX 代理程序连接到 Java 应用程序 (如果它有权访问指定的端口)。 这些非安全选项只能在开发或测试环境中使用。 有关配置安全选项的更多信息,请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/connectors.html。-Dcom.sun.management.jmxremote.port=<port number> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
- 通过在命令行上输入 jconsole 来启动 JConsole。 您的路径必须包含 Java 安装的 bin 目录。
- 将打开 "JConsole 新建连接 " 对话框: 输入您在步骤 1中指定的主机名和端口号。 如果要在与 Java 应用程序相同的工作站上运行 JConsole ,请将主机名值保留为 localhost。 对于远程系统,请将主机字段值设置为工作站的主机名或 IP 地址。 如果使用了步骤 1中指定的选项,请将 用户名 和 密码 字段留空。
- 单击 连接。 JConsole 将启动并显示摘要选项卡。
设置 JConsole 以监控自身
- 通过在命令行上输入 jconsole 来启动 JConsole。 您的路径必须包含 SDK 的 bin 目录。
- 此时将打开 JConsole 新建连接 对话框: 在 远程进程 字段中输入 localhost:0 。
- 单击 连接。 这会启动 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 。