.net GC在没有内存限制的Kubernetes pod中的性能



我正在检查一个缩放问题,我们怀疑它与内存有关,但在本地机器上运行负载测试后,它似乎没有内存泄漏。我们在Kubernetes中托管。net核心应用程序,资源设置为800mi请求内存,没有限制。根据这篇文章

的描述

触发垃圾回收时,系统有low并从操作系统获取通知。

那么,这是否意味着如果我们没有设置内存限制,那么在节点内存不足之前,GC不太可能启动,并且它最终会占用节点中的大部分内存?

是的,这正是在。net和其他pod中可能发生的事情。

始终设置内存和CPU限制,因为这可能会影响到其他pod或为命名空间配置默认内存请求和限制

@Martin是对的,但是我想就这个话题提供一些更多的见解。

Kubernetes最佳实践:资源请求和限制是一个很好的指南,通过详细的解释和示例解释了这些机制背后的思想。

此外,管理容器资源将为您提供有关以下方面的官方文档:

  • 请求和限制

  • 资源类型
  • Pod和Container的资源请求和限制

  • Kubernetes中的资源单元

  • 如何调度有资源请求的pod

  • 有资源限制的pod如何运行等

请记住,在计算每个容器需要多少资源时,有一个好的策略是非常重要的。理想情况下,您的pod应该使用您所请求的资源数量,但这几乎是不可能实现的。如果使用率低于您的请求,那么您就是在浪费资源。如果它更高,则有可能出现性能问题。考虑将请求值上下25%的裕度作为一个好的起点。关于限制,实现一个好的设置将取决于尝试和调整。没有适合每个人的最佳值,因为它取决于与应用程序本身、需求模型、对错误的容忍度等相关的许多因素。

最后,您可以使用metrics-server来获取pod的CPU和内存使用情况。

最新更新