我有一个在Kubernetes上运行的服务,用于处理从另一资源传递来的文件。单个文件的大小可以在10MB-1GB之间变化。
最近我一直看到由于OOMKilled错误而导致豆荚死亡:
State: Running
Started: Sun, 11 Nov 2018 07:28:46 +0000
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Fri, 09 Nov 2018 18:49:46 +0000
Finished: Sun, 11 Nov 2018 07:28:45 +0000
我通过增加Pod上的资源(内存)限制来缓解此问题。但是,我担心每当流量或文件大小增加时,我们都会再次遇到此OOMKilled问题。但是,如果我将内存限制设置得太高,我担心它将在此主机的主机上造成麻烦。
我阅读了Kubernetes提供的最佳实践:https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#best-practices。但是我不确定通过添加--eviction-hard和--system-reserved = memory是否可以解决此问题。
以前有没有人遇到过类似的问题?
任何帮助将不胜感激。
答案 0 :(得分:2)
除了Kubernetes / Container运行时问题之外,这还涉及应用程序中的更多内存管理,并且这取决于使用哪种语言运行时或JVM是否在运行您的应用程序。
通常,您希望为应用程序中的内存使用量设置一个上限,例如,JVM中的最大堆空间,然后为垃圾回收和溢出留出一些余地。
另一个示例是Go运行时,它看起来像they have talked关于内存管理,但在撰写本文时还没有解决方案。对于这些情况,最好为应用程序的特定过程手动设置ulimit
虚拟内存。 (如果有泄漏,您将看到其他类型的错误)或使用timeout
还有manual cgroup management,但同样,这也确实适用于docker,而Kubernetes应该可以。
This is a good article,其中包含有关在容器中管理JVM的一些见解。