第 4 章 OpenShift 上 S2I 的工作流示例


4.1. 为 OpenShift 镜像远程调试 Java 应用

该流程中的示例显示,使用 S2I for OpenShift 镜像对 OpenShift 上部署的 Java 应用进行远程调试。您可以通过将环境变量 JAVA_DEBUG 的值设置为 trueJAVA_DEBUG_PORT 设置为 9009 来启用该功能。

注意

如果 JAVA_DEBUG 变量设为 true,并且没有为 JAVA_DEBUG_PORT 变量提供值,则 JAVA_DEBUG_PORT 默认设为 5005

为部署准备

流程

  1. 运行以下命令并提供您的凭证来登录到 OpenShift 实例:

    $ oc login
  2. 创建一个新项目

    $ oc new-project js2i-remote-debug-demo

Deployment

您可以为新的和现有应用程序启用远程调试。

为新应用程序启用远程调试

流程

  • 使用 S2I 用于 OpenShift 镜像和示例 Java 源代码创建一个新应用。在创建应用程序前,请确保设置 JAVA_DEBUGJAVA_DEBUG_PORT 环境变量:

    $ oc new-app --context-dir=getting-started --name=quarkus-quickstart \
     'registry.access.redhat.com/ubi8/openjdk-11~https://github.com/quarkusio/quarkus-quickstarts.git#2.12.1.Final'
      -e JAVA_DEBUG=true \
      -e JAVA_DEBUG_PORT=9009

    继续 将本地调试端口连接到 pod 上的端口

为现有应用程序启用远程调试

流程

  1. 切换到适当的 OpenShift 项目:

     $ oc project js2i-remote-debug-demo
  2. 检索 deploymentconfig 的名称:

    $ oc get dc -o name
     deploymentconfig/openshift-quickstarts
  3. 编辑 deploymentconfig 并添加 JAVA_DEBUG=trueJAVA_DEBUG_PORT=9009 环境变量。
  4. 指定在路径 .spec.template.spec.containersContainer 类型下编辑的对象:

    $ oc edit dc/openshift-quickstarts
    注意

    在终端中启动编辑器,以运行 oc edit 命令。您可以通过定义环境的 EDITOR 变量来更改启动的编辑器。

继续 将本地调试端口连接到 pod 上的端口

post-deployment

将本地调试端口连接到 pod 上的端口

流程

  1. 获取运行应用的 pod 的名称(Status Running):

    显示 openshift-quickstarts-1-1uymm 作为 pod 名称的示例。

    $ oc get pods
    NAME                            READY     STATUS      RESTARTS   AGE
    openshift-quickstarts-1-1uymm   1/1       Running     0          3m
    openshift-quickstarts-1-build   0/1       Completed   0          6m
  2. 使用 OpenShift 或 Kubernetes 端口转发功能来监听本地端口并转发到 OpenShift 容器集上的端口。<running-pod > 是 pod 的 NAME 字段的值,带有上一命令输出中的 Status "running" :

    $ oc port-forward <running-pod> 5005:9009
    Forwarding from 127.0.0.1:5005 -> 9009
    Forwarding from [::1]:5005 -> 9009
    注意

    在上例中,5005 是本地系统上的端口号,而 9009 是运行 OpenShift 镜像的 S2I 的 OpenShift 容器集的远程端口号。因此,以后对本地端口 5005 的调试连接被转发到运行 Java 虚拟机(JVM)的 OpenShift 容器集的端口 9009

重要

该命令可能会阻止您在终端中进一步输入。在这种情况下,启动一个新终端来执行后续步骤。

将调试器附加到应用程序

流程

  1. 将本地系统上的调试器附加到 S2I for OpenShift 镜像上运行的远程 JVM:

    $ jdb -attach 5005
    Set uncaught java.lang.Throwable
    Set deferred uncaught java.lang.Throwable
    Initializing jdb ...
    >
    ...
    注意

    启动到远程 OpenShift pod 调试连接的本地调试器后,控制台中会显示与处理 5005 的连接类似的条目,其中发出了前面的 oc port-forward 命令。

  2. 调试应用程序:

    $ jdb -attach 5005
    Set uncaught java.lang.Throwable
    Set deferred uncaught java.lang.Throwable
    Initializing jdb ...
    > threads
    Group system:
      (java.lang.ref.Reference$ReferenceHandler)0x79e Reference Handler            cond. waiting
      (java.lang.ref.Finalizer$FinalizerThread)0x79f  Finalizer                    cond. waiting
      (java.lang.Thread)0x7a0                         Signal Dispatcher            running
    Group main:
      (java.util.TimerThread)0x7a2                    server-timer                 cond. waiting
      (org.jolokia.jvmagent.CleanupThread)0x7a3       Jolokia Agent Cleanup Thread cond. waiting
      (org.xnio.nio.WorkerThread)0x7a4                XNIO-1 I/O-1                 running
      (org.xnio.nio.WorkerThread)0x7a5                XNIO-1 I/O-2                 running
      (org.xnio.nio.WorkerThread)0x7a6                XNIO-1 I/O-3                 running
      (org.xnio.nio.WorkerThread)0x7a7                XNIO-1 Accept                running
      (java.lang.Thread)0x7a8                         DestroyJavaVM                running
    Group jolokia:
      (java.lang.Thread)0x7aa                         Thread-3                     running
    >

其他资源

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部