Memory Kubernetes Pod OOMKilled溶液

Memory Kubernetes Pod OOMKilled溶液,memory,kubernetes,Memory,Kubernetes,我在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,

我在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给出的最佳实践:。但我不确定通过添加--execution hard和--system reserved=内存来解决这个问题

以前有没有人遇到过类似的问题


任何帮助都将不胜感激。

不仅仅是Kubernetes/Container运行时问题,这是应用程序中更多的内存管理,这取决于运行时的语言或JVM之类的东西是否正在运行应用程序

您通常希望在应用程序中设置内存使用的上限,例如JVM中的最大堆空间,然后为垃圾收集和溢出留出一点空间

另一个例子是Go运行时,看起来像是关于内存管理的,但在撰写本文时还没有解决方案。对于这些情况,最好为应用程序的特定进程手动设置虚拟内存。(如果发生泄漏,您将看到其他类型的错误)或使用

还有一点,但又一次,这正是docker和Kubernetes应该做的


了解如何在容器中管理JVM。

粘贴应用程序日志,然后从那里开始,如果在应用程序级别上没有优化空间,则分配更多内存库!我的服务是Java的。所以JVM肯定是一个处理内存问题的问题。我将堆空间限制设置为比kubernetes pod的限制低1GB。不确定这是否会给GC.Edward带来任何问题,如果您的java代码正在生成许多线程,那么设置jvm最大堆将不会有任何帮助。Java线程将使用jvm堆之外的内存。这些可能导致容器oom错误,而不是java oom错误。归根结底,这实际上取决于java应用程序在接收大文件时正在做什么。