了解如何配置 Java Management Service 高级功能
Java Management Service (JMS) 是基于 Oracle Cloud Infrastructure (OCI) 的原生服务。JMS 可用于管理、监视和保护您自己的托管计算实例(内部部署或 OCI)中的 Java 安装。
可以将 JMS 用于:
- 可见性:在整个企业中发现和管理 Java
- 洞察分析:分析 Java Virtual Machine (JVM) 配置、安全性、合规性、性能
- 优化:安全性、迁移、优化和自动化
您是否曾想过,您当前的安全状况是否与 Oracle 针对 Java 运行时提出的安全建议保持一致,并且是否是最新的?JMS 可以帮助您找到答案,它可以报告应用程序使用的任何有问题的 Java 库,并检查您已在运行的应用程序在安全区域中是否存在缺陷。您是否难以理解 Java 应用的性能,或者难以理解 Java 垃圾收集器的日志?JMS 通过性能分析来拯救生命。您不确定是否可以轻松切换到较新版本的 Java?我们向您介绍了 Java 迁移分析。
使用 JMS,Java 飞行记录器 (JFR) 记录从未如此简单,您只需在 JMS 中选择应用程序,提供一些详细信息并提交记录请求即可。JFR 记录工作请求完成后,您可以从 JMS 组的存储桶轻松访问这些请求。不仅如此,JMS 还附带了 Java 生命周期管理功能,例如安装 Java 运行时或提供有关 Java 应用服务器的其他详细信息。
此解决方案手册概述了配置 JMS 高级功能以解决上述 Java IT 问题的步骤。
JMS 高级功能可用于深入了解环境中 Java 的不同方面。例如,使用高级功能,您可以:
- 扫描应用使用的 Java 库,以识别并报告与第三方 Java 库关联的潜在漏洞 (CVE)。
- 利用性能分析,通过 JVM 优化建议来优化 Java 工作负载性能。
- 通过 Java 迁移分析评估将 Java 应用程序迁移到较新的 JDK 版本所需的可行性和工作量。
- 通过使用加密事件分析来确定将停止处理 Oracle JRE 和 JDK 加密路线图中即将进行的更新的弱加密用法,有助于确保应用程序的安全。
- 通过扫描 Java 服务器,了解每个 Java 应用服务器上运行哪些服务和应用。
- 运行 JDK 飞行记录器以远程收集应用洞察。
- 下载、安装和配置 Java 运行时。
- 删除报告的 Oracle Java 版本。
- 分配或删除部署规则集。
使用须知
需要 Oracle Cloud (OCI) 账户才能访问 Java Management Service。您可以使用自己的云账户,也可以获得 OCI 免费套餐账户。
在本解决方案手册中概述的示例中,我们使用 OCI 命令行工具。如果您有兴趣自行尝试这些示例,请根据以下指南命令行界面 (Command Line Interface,CLI) 设置和配置 OCI CLI。运行示例的其他要求是计算机上存在 jq
命令行实用程序,您将在其中执行 oci 工具命令。您可以从其 GitHub 项目页 https://github.com/jqlang/jq 获取几乎每个平台的此实用程序。
确保正确设置了 Oracle Linux 计算机以允许与 OCI 服务通信。机器可以是:
- 在您的租户中可用的 OCI 计算实例。如果您尚未设置实例,请参阅创建 OCI 计算实例。
- 非 OCI 主机,即应通过 JMS 服务监视的内部部署(在您自己的数据中心、第三方云等中)。
体系结构
本手册简要介绍了 Java Management Service 高级功能的引入,特别是为了深入了解您的 Java 安装并根据需要采取更正措施。此解决方案适用于在 JMS 中为 OCI、内部部署和第三方云中的 Oracle 安装启用高级功能。
JMS 代理安装在托管实例上,以收集 Java 使用情况遥测和 Java 使用情况元数据。遥测数据将发送到您的租户并存储在租户中,以提供隐私保护。
下图说明了生产中 JMS 服务的拓扑。该图显示了部署的代理,用于跟踪在 OCI 上运行的 Java、内部部署桌面、笔记本电脑和服务器以及第三方云服务。这些代理部署在您的托管实例中,并与您在租户中创建的资源(组)关联。
租户中安装的代理将从您的租户中泄露 Java 使用情况元数据。JMS 使用此元数据生成洞察,例如 Java 版本、安全基线和即将进行的 Java 更新以及应用程序使用情况;登录到 OCI 控制台时会显示这些洞察。除了处理泄露的元数据之外,没有 Oracle 访问权限。
使用 JMS 中提供的高级功能,您可以分析 Java 应用服务器的使用情况,确定环境中运行的应用程序所使用的 Java 库中的潜在漏洞,使用 Java 飞行记录器进行性能和加密分析,以及管理环境中的 Oracle Java 运行时(JDK 版本)。您可以使用高级功能来管理环境中运行的 Java。
下图说明了此体系结构。
总体而言,以下部分介绍托管实例上安装的 JMS 代理与 OCI 上的 JMS 服务之间的数据流:
- 在托管实例上安装代理,代理向 OCI 注册。
- 您可以配置或启用 JMS 插件(将 JMS 组作为参数传递)。JMS 代理现在与所需的 JMS 组关联。
- 注册的 JMS 代理轮询 JMS 以进行工作。JMS 将使用适当的工作请求(如果有)响应轮询。
- JMS 代理定期扫描托管实例以查找使用情况跟踪器中的 Java 安装或条目,并将 Java 度量和 Java 元数据发送到 OCI。
有关 JMS 代理与 OCI 服务之间的数据流以及主机(内部部署)上安装的 JMS 代理与在 OCI 中运行的 JMS 之间的流量流的详细信息,请参阅监视和管理 Java 和 Java 应用程序安装。
此体系结构包含以下组件:
- 区域
OCI 区域是一个本地化的地理区域,其中包含一个或多个托管可用性域的数据中心。区域独立于其他区域,并且很远的距离可以将它们分开(跨越国家甚至大洲)。
- 可用性域
可用性域是区域中独立的数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,从而提供容错能力。可用性域不共用基础设施(例如电源或冷却设备)或内部可用性域网络。因此,一个可用性域出现故障不会影响该区域中的其他可用性域。
- Tenancy
租户是 Oracle 在您注册 OCI 时在 Oracle Cloud 中设置的安全隔离分区。您可以在租户的 OCI 上创建、组织和管理资源。租户是公司或组织的同义词。通常,公司将具有单个租户,并反映其在该租户中的组织结构。单个租户通常与单个订阅关联,而单个订阅通常只有一个租户。
- 区间
区间是 OCI 租户中的跨区域逻辑分区。使用区间来组织、控制访问并为 Oracle Cloud 资源设置使用限额。在给定的区间中,您可以定义策略来控制对资源的访问和设置权限。
- 虚拟云技术网络 (VCN) 和子网
虚拟云网络 (VCN) 是您可以在 OCI 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您控制网络环境。一个 VCN 可以具有多个不重叠的无类域间路由 (classless inter-domain routing,CIDR) 块,在创建 VCN 后可以更改这些块。您可以将 VCN 细分为多个子网,这些子网可以限定为某个区域或某个可用性域。每个子网由一系列不与 VCN 中的其他子网重叠的连续地址组成。您可以在创建子网后更改子网的大小。子网可以是公共子网,也可以是专用子网。
- 实例池
实例池是区域中的一组实例,这些实例是根据相同实例配置创建并作为组进行管理的。
- 内部部署网络
这是您的组织使用的本地网络。
- OCI API 网关
借助 Oracle Cloud Infrastructure API Gateway ,您可以发布具有专用端点的 API,这些端点可从您的网络访问,并且您可以根据需要向公共互联网公开。这些端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。
- 动态路由网关 (DRG)
DRG 是一个虚拟路由器,用于为同一区域中的 VCN、VCN 与该区域之外的网络(例如另一个 OCI 区域中的 VCN、内部部署网络或其他云提供商中的网络)之间的专用网络流量提供路径。
- 服务网关
通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量将通过 Oracle 网络结构传输,不会通过互联网。
- Oracle Autonomous Database
Oracle Autonomous Database 是一个完全托管的预配置数据库环境,可用于事务处理和数据仓库工作负载。您不需要配置或管理任何硬件,也不需安装任何软件。OCI 可处理数据库创建、备份、打补丁、升级和调优。
- 堡垒机
堡垒主机是一个计算实例,它为客户从云外部访问拓扑提供了安全受控的入口点。堡垒主机通常预配在隔离区 (DMZ) 中。利用它,您可以将敏感资源放在无法从云外部直接访问的专用网络中,从而保护敏感资源。拓扑具有已知的单个入口点,您可以定期对其进行监视和审计。因此,您可以避免公开拓扑中较为敏感的组件,同时又不会影响对它们的访问。
- Oracle Cloud Agent
Oracle Cloud Agent 是一个轻量级流程,用于管理在 OCI 上的计算实例上运行的插件的生命周期。JMS 插件从部署在 OCI 中托管实例上的环境中收集 Java 元数据。JMS 插件将此 Java 元数据渗透到 OCI 中的 JMS 服务。
- OCI Compute
借助 Oracle Cloud Infrastructure Compute ,您可以在云中预配和管理计算主机。您可以启动具有配置的计算实例,以满足您在 CPU、内存、网络带宽和存储方面的资源需求。创建计算实例后,您可以安全地访问它,重新启动它,附加和分离卷,并在不再需要时终止它。
- OCI DNS
Oracle Cloud Infrastructure 域名系统 (Domain Name System,DNS) 服务是一个高度可扩展的全球任播域名系统 (anycast Domain Name System,DNS) 网络,可提供增强的 DNS 性能、弹性和可扩展性,可帮助最终用户随时随地快速连接到互联网应用。
- Kafka 流
Kafka Streams 是一个用于构建应用和微服务的客户端库,其中输入和输出数据存储在 Kafka 集群中。它将编写和部署标准 Java 和 Scala 应用程序的简单性与 Kafka 服务器端集群技术的优势相结合。
- OCI 日志记录Oracle Cloud Infrastructure Logging 是一项高度可扩展且完全托管的服务,支持您从云端资源访问以下类型的日志:
- 审计日志:与 OCI Audit 生成的事件相关的日志。
- 服务日志:各个服务(例如 OCI API Gateway 、 OCI Events 、 OCI Functions 、 OCI Load Balancing 、 OCI Object Storage 和 VCN 流日志)发布的日志。
- 定制日志:包含来自定制应用程序、其他云提供商或内部部署环境的诊断信息的日志。
- Oracle Management Agent
Oracle Management Agent 是一项服务,可在 Oracle Cloud Infrastructure 与本地托管实例之间提供低延迟的交互式通信和数据收集。管理代理从要监视的源收集数据。Management Agent Service 是 Oracle Cloud Service,用于管理管理代理和服务的插件的生命周期。
- OCI 监视
Oracle Cloud Infrastructure Monitoring 主动和被动地监视您的云资源,并使用预警在指标满足指定触发器时通知您。
- OCI 对象存储
OCI Object Storage 可访问任意内容类型的大量结构化和非结构化数据,包括数据库备份、分析数据以及图像和视频等丰富内容。您可以安全地直接从应用或云平台内存储数据。您可以扩展存储,而不会出现性能或服务可靠性下降的情况。
将标准存储用于您需要快速、立即和频繁访问的“热”存储。将归档存储用于长期保留且很少或很少访问的“冷”存储。
- 策略
Oracle Cloud Infrastructure Identity and Access Management 策略指定谁可以访问哪些资源以及如何访问。在组和区间级别授予访问权限,这意味着您可以编写策略来为组授予特定区间或租户中特定类型的访问权限。
- 安全列表
您可以为每个子网创建安全规则,以指定允许进出子网的通信的源、目标和类型。
- 安全区
安全区域通过对整个区间实施策略(例如加密数据和阻止公共访问网络)来实施关键 Oracle 安全优秀实践。安全区域与同名的区间关联,并包括应用于区间及其子区间的安全区域策略(配方)。无法将标准区间添加到安全区域区间或将其移动到安全区域区间。
- OCI Vault
借助 Oracle Cloud Infrastructure Vault ,您可以创建并集中管理加密密钥,以保护您的数据和用于保护云中资源访问安全的密钥凭证。默认密钥管理是 Oracle 管理的密钥。您还可以使用客户管理的密钥,这些密钥使用 OCI Vault 。OCI Vault 提供一组丰富的 REST API 来管理 Vault 和密钥。
- OCI 工作流
Oracle Cloud Infrastructure Workflow 是一个无服务器工作流引擎,它为开发人员和架构师提供了图形流设计器。它可加快 OCI 服务(例如 OCI Functions 或 AI/ML)的创建、运行和编排。
注意事项
启用高级功能时,应注意以下几点。
- 使用 JMS 高级功能需要其他策略
- 加密事件分析、性能分析和 JDK 飞行记录器可能会增加应用程序 JVM 的整体内存使用量。
- 对于加密事件分析、性能分析和 JDK 飞行记录器,应用程序的 Java 运行时版本必须为 8u361 或更高版本。
- 每个 JFR 记录的加密事件分析和性能分析上限设置为 4096 MB。
- 使用 OCI Object Storage 和 OCI Logging 服务存储 JMS 高级功能生成的数据可能会产生额外成本。
- Java 生命周期管理
- 部署规则集功能仅适用于 Java 8 运行时。额外开销是组托管实例上策略 jar 的分布。
- Java 安装可能会更改托管实例上的 Java 系统配置。按照所选 Java 运行时版本和托管实例平台的安装说明进行操作。
- 删除 Java 运行时可能会更改托管实例上的 Java 系统配置。例如,如果所选 Java 运行时是托管实例上唯一配置的系统运行时。
- 高级使用情况追踪
- 要检测正在运行的 Java 应用服务器,其 Java 运行时必须至少为 8u361 或更高版本。
- 在检查应用程序及其库期间,磁带库检测可能会显著增加托管实例的资源消耗,特别是 CPU 和 IO 利用率可能会增加。
- 根据在托管实例上检测到的应用服务器和库数,发送到 JMS 的有效负载可能高于通常值。在正常情况下,它应该在几百千字节的范围内。
- 加密货币事件分析
- 根据每个应用程序在记录期间使用 JVM 的安全相关子系统的程度,JFR 记录文件的最终大小可能会有所不同,在正常情况下,通常的记录大小介于几百千字节到几兆字节之间。
- 如果应用程序处于空闲状态,则某些检测机制可能不会报告潜在问题。
- 可以根据托管实例数、应用程序数和每个记录的大小来提高网络利用率。在将 JFR 录制上载到 OCI 进行分析期间会使用网络。
- 性能分析
- 每个 JFR 记录文件的最终大小取决于应用程序行为。捕获多个与性能相关的 JFR 事件,例如有关垃圾收集、内存等的详细信息。在正常情况下,通常的录制大小为几兆字节。
- 如果应用程序处于空闲状态,某些检测机制可能不会报告潜在的性能问题。
- 可以根据托管实例数和每个记录的大小来提高网络利用率。在将 JFR 录制上载到 OCI 进行分析期间会使用网络。
- JDK 飞行记录器 (JFR)
- JFR 记录文件的最终大小取决于所选配置文件或提供的定制 JFC 配置,影响大小的另一个因素是应用程序的所选记录持续时间。
- Java 移植分析
- 在分析应用程序期间,资源利用率可能会增加。
- 分析结果通常按几百千字节的顺序排列,具体取决于应用程序本身的大小及其依赖项。
一些高级功能,如加密分析和性能分析依赖于 JVM 附加 API。在执行工作请求期间,JMS 插件可能会向组的清单日志对象发送新事件。以下示例有效负载说明了在此类情况下将交付到组库存日志中的内容:
{
"datetime": 1752483223432,
"logContent": {
"id": "3d6a9915-af91-4527-a6d4-2a0d86106b15",
"time": "2025-07-14T08:53:43.432Z",
"oracle": {
"compartmentid": "ocid1.compartment.oc1..compartment-id",
"ingestedtime": "2025-07-14T08:55:27.274970180Z",
"instanceid": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
"logid": "ocid1.log.oc1.eu-frankfurt-1.log-id",
"tenantid": "ocid1.tenancy.oc1..tenant-id"
},
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"subject": "Oracle JMS Plugin",
"type": "jms.jvm.usage.attach.log",
"data": {
"data": {
"additionalProperties": {
"java.runtime.name": "Java(TM) SE Runtime Environment",
"user.dir": "/home/opc/crypto",
"user.name": "opc"
},
"applicationName": "spring-tls-server-1.1.0.jar",
"classPath": "spring-tls-server-1.1.0.jar",
"classPathElements": [
"spring-tls-server-1.1.0.jar"
],
"fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
"javaArgs": "n/a",
"javaCommand": "spring-tls-server-1.1.0.jar --debug",
"javaDistribution": "Java(TM) SE Runtime Environment",
"javaHome": "/usr/lib/jvm/jdk-21-oracle-x64",
"javaMajorVersion": "21",
"javaVendor": "Oracle Corporation",
"javaVersion": "21",
"managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"osArch": "amd64",
"osName": "Linux",
"osVersion": "5.15.0-306.177.4.el9uek.x86_64",
"startTime": "2025-07-14T08:48:34.947541200Z",
"typeOfStart": "VM start"
},
"datacontenttype": "application/json",
"dataschema": "1.0",
"id": "3d6a9915-af91-4527-a6d4-2a0d86106b15",
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"time": "2025-07-14T08:53:43.432Z",
"type": "jms.jvm.usage.attach.log"
}
},
"regionId": "eu-frankfurt-1"
}
其他注意事项
在 JMS 中提交功能执行请求后,JMS 服务将创建由唯一工作请求 OCID 标识的工作请求。下面是从 OCI Cloud Console 跟踪工作请求进度的典型过程。
- 通过单击可观察性和管理、Java 管理和组导航到组。
- 选择您的组。
- 单击组的工作请求部分。
如何从 OCI CLI 跟踪工作请求的进度:
- 执行以下命令:
oci jms work-request get --work-request-id $WORK_REQUEST_OCID
- 如果您只对工作请求的当前状态感兴趣,则可以使用
jq
实用程序执行上述语句:oci jms work-request get --work-request-id $WORK_REQUEST_OCID | jq .data.status
JMS API 还提供提交和跟踪功能工作请求的功能,可通过 OCI SDK 访问。