0

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

请帮忙。

4

1 回答 1

0

我需要在 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绑定到应用程序,则终端堆转储将以 <CONTAINER_DIR>/<SPACE_NAME>-<SPACE_ID[0,8]>/<APPLICATION_NAME>-<APPLICATION_ID 模式写入[0,8]>/<INSTANCE_INDEX>--<INSTANCE_ID[0,8]>.hprof

关键是您适当地命名绑定卷服务,即名称必须包含字符串heap-dump

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

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

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

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

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

于 2021-05-25T13:59:15.600 回答