我的基于JVM的应用程序在Amazon ECS上运行。在某些我无法在测试环境中重现的情况下,它会崩溃并出现OutOfMemoryError。我想捕获JVM堆转储(使用HeapDumpOnOutOfMemoryError
)来查看正在发生的事情。但是有一个问题 - 因为我的应用程序使用了大量内存,堆转储需要很长时间,并且ECS会在容器中间杀死容器,因为运行状况检查失败。我最终得到一个不可用的截断转储文件。
我可以通过更改运行状况检查配置来获取正确的堆转储,但它可能会影响ECS服务,因为如果没有良好的运行状况检查,群集可能正在运行无响应的实例。
我正在寻找一种方法,这将让我自动捕获堆转储,同时尽可能减少对生产群集的影响。
我发现的方式:
HeapDumpOnOutOfMemoryError
JVM选项(启用它)
节点数(设置为1)