我们在Kubernetes上部署了一个应用程序。其中一项服务是在JVM中运行的应用程序。
我们的应用程序有问题,耗费大量内存。我们正在达到Replication Controller中设置的限制,这使它重新启动pod。
为此使用复制控制器是个好主意吗?或者,最好是限制JVM上的内存(将其设置为低于复制控制器限制的内容)并使用pod中的其他内容重新启动应用程序?
如果JVM因内存不足异常而停止,我可以使用JVM编写的内存转储。现在我对占据记忆的东西视而不见。
感谢您的回复!
答案 0 :(得分:1)
实际上,这不是Deployment / ReplicationController的责任。重启在Pod自己内部处理。至于处理内存,这不是一个微不足道的问题,你应该在两个级别(像堆大小等等)控制它,以便你的应用程序避免达到限制,但如果它确实去了墙,pod的限制将处理它,这是完全正常的(特别是如果你运行多个pod,那么你有HA)。
这里的问题是,调整内存限制有点棘手,并且可能通过试验和错误+监控pod /容器指标(Prometheus / Grafana救援:)可以做得最好。)