我需要在 PCF 清单 yml 中使用 -XXHeapdumoOutofmemory 和 -XXHeapdumoFilepath 选项来在 OutOfMemory 上创建堆转储。我知道我可以在 vm args 中使用 SMB 或 NFS,但是当应用程序出现 OutOfMemory 且无法访问时如何检索堆转储文件。
请帮忙。
我需要在 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
绑定到应用程序,则终端堆转储将以 <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 且无法访问时如何检索堆转储文件。
要检索堆转储,您需要以某种方式访问文件服务器。我说“不知何故”,因为这完全取决于您在您的环境中被允许做什么。
最好的办法是与 SMB 或 NFS 服务器的管理员交谈。他或她可以告知您在您的环境中可用的选项。