如何使用 SMB 在 PCF 中检索堆转储

问题描述

我需要在 PCF 清单 yml 中使用 -XXHeapdumoOutofmemory 和 -XXHeapdumoFilepath 选项来在 OutOfMemory 上创建堆转储。 我知道我可以在 vm args 中使用 SMB 或 NFS,但是当应用程序变为 OutOfMemory 且无法访问时如何检索堆转储文件

请帮忙。

解决方法

我需要在 PCF 清单 yml 中使用 -XXHeapdumoOutofmemory 和 -XXHeapdumoFilepath 选项来在 OutOfMemory 上创建堆转储

您不需要设置这些选项。 Java buildpack 会为您处理这个问题。默认情况下,它会安装一个 jvmkill 代理,它会自动执行此操作。

https://github.com/cloudfoundry/java-buildpack/blob/main/docs/jre-open_jdk_jre.md#jvmkill

此外,jvmkill 代理足够智能,如果您将 SMB 或 NFS 卷服务绑定到您的应用程序,它会自动将堆转储保存到该位置。从上面的文档链接...

如果名称或标签中包含字符串 heap-dump 的卷服务绑定到应用程序,终端堆转储将使用模式 /-/-/--.hprof

关键是你对绑定的卷服务进行了适当的命名,即名称必须包含字符串heap-dump

您也可以使用 Java buildpack 可根据要求为您安装的 Java Memory Agent 对非终端堆转储执行相同的操作。

我知道我可以在 vm args 中使用 SMB 或 NFS,但是当应用程序变为 OutOfMemory 且无法访问时如何检索堆转储文件。

要检索堆转储,您需要以某种方式访问​​文件服务器。我说“以某种方式”是因为这完全取决于您可以在您的环境中做什么。

  1. 您可能被允许将 SMB/NFS 卷直接安装到您的 PC。然后您可以直接访问这些文件。
  2. 您可以通过其他协议(如 HTTP、FTP 或 SFTP)检索文件。
  3. 您可以将 SMB 或 NFS 卷挂载到另一个应用程序,或许可以使用静态文件 buildpack,为您提供文件。
  4. 您可能需要向具有访问权限的管理员请求文件。

最好与您的 SMB 或 NFS 服务器的管理员交谈。他或她可以告知您在您的环境中可用的选项。