我基于JVM的应用程序在Amazon ECS上运行。在某些无法在测试环境中重现的条件下,它因OutOfMemoryError崩溃。我想捕获JVM堆转储(使用HeapDumpOnOutOfMemoryError
)以查看发生了什么。但是有一个问题-因为我的应用程序使用大量内存,堆转储会花费很长时间,而ECS会杀死其中的容器,因为运行状况检查会失败。我最终得到了一个无法使用的,被截断的转储文件。
我可以通过更改运行状况检查配置来获得正确的堆转储,但它可能会影响ECS服务,因为如果没有良好的运行状况检查,群集可能会运行无响应的实例。
我正在寻找一种方法,它将使我能够自动捕获堆转储,并且对生产集群的影响最小。
答案 0 :(得分:0)
我的发现方式:
HeapDumpOnOutOfMemoryError
JVM选项(启用它)答案 1 :(得分:0)
这是在Fargate实例还是EC2周围?
无论哪种情况,您都可以在同一群集中添加EC2实例,并且即使任务失败,该节点也能够登录到主机并获取堆转储。