【问题标题】:JProfiler remote process list empty after selecting container选择容器后 JProfiler 远程进程列表为空
【发布时间】:2021-09-30 20:41:44
【问题描述】:

我正在使用 JProfiler 12 并尝试通过 SSH 连接到 Docker 容器中的远程 JVM 进程。我已按照此处的说明进行操作:https://www.ej-technologies.com/products/jprofiler/whatsnew12.html#:~:text=Attaching%20to%20JVMs%20running

在我必须选择流程之前,一切都运行良好。该列表为空。没有错误信息。

我在任何地方都找不到任何此类问题。我发现其他人有文件夹权限问题,但这不是我的问题,因为我以 root 身份连接。即使我将文件夹权限更改为 777,它仍然什么都不做。

这是我得到的:

这是我应该得到的:

[2021 年 10 月 1 日更新]

一个问题是我使用 Kubernetes pod securityContext 和 readOnlyRootFilesystem、allowPrivilegeEscalation 并放弃了一些功能。当我删除这些时,我可以看到该过程。但是当我单击打开时,它会失败并出现以下错误:

这似乎表明我使用了错误的用户(root)。但是当我切换到该用户时,我什至在选择容器之前就收到了这个错误:

所以现在我被卡在了前一步。

【问题讨论】:

  • 您尝试在 Docker 容器中分析的 JVM 的 java -version 输出是什么?
  • @IngoKegel openjdk version "1.8.0_275" OpenJDK Runtime Environment (IcedTea 3.17.1) (Alpine 8.275.01-r0) OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
  • 可以尝试切换到root用户吗?
  • @IngoKegel 当我以 root 身份运行时,出现错误(请参阅问题中的最后一个对话框截图)。

标签: jprofiler


【解决方案1】:

我想出了一个解决方法。

当你使用的时候会发现

securityContext:
  readOnlyRootFilesystem: true
  allowPrivilegeEscalation: false
  capabilities:
    drop:
      - <...capabilities...

spec:
  securityContext:
    runAsUser: <user id>
    runAsGroup: <group id>
    fsGroup: <id>

然后 JProfiler 无法连接到您的容器。所以摆脱这一切。您甚至可以在运行时执行此操作,而无需通过编辑您的 Kubernetes 部署 kubectl edit deployment 来删除这些项目来重建您的容器映像。

【讨论】:

  • 感谢您记录这一点。 JProfiler 13 将直接支持附加到 Kubernetes,那么这应该不再是问题了。
猜你喜欢
  • 1970-01-01
  • 2016-11-15
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多