我正在检查一个缩放问题,我们怀疑它与内存有关,但在本地机器上运行负载测试后,它似乎没有内存泄漏。我们在Kubernetes中托管。net核心应用程序,资源设置为800mi请求内存,没有限制。根据这篇文章
的描述触发垃圾回收时,系统有low并从操作系统获取通知。
那么,这是否意味着如果我们没有设置内存限制,那么在节点内存不足之前,GC不太可能启动,并且它最终会占用节点中的大部分内存?
是的,这正是在。net和其他pod中可能发生的事情。
始终设置内存和CPU限制,因为这可能会影响到其他pod或为命名空间配置默认内存请求和限制
@Martin是对的,但是我想就这个话题提供一些更多的见解。
Kubernetes最佳实践:资源请求和限制是一个很好的指南,通过详细的解释和示例解释了这些机制背后的思想。
此外,管理容器资源将为您提供有关以下方面的官方文档:
-
请求和限制
- 资源类型
-
Pod和Container的资源请求和限制
-
Kubernetes中的资源单元
-
如何调度有资源请求的pod
-
有资源限制的pod如何运行等
请记住,在计算每个容器需要多少资源时,有一个好的策略是非常重要的。理想情况下,您的pod应该使用您所请求的资源数量,但这几乎是不可能实现的。如果使用率低于您的请求,那么您就是在浪费资源。如果它更高,则有可能出现性能问题。考虑将请求值上下25%的裕度作为一个好的起点。关于限制,实现一个好的设置将取决于尝试和调整。没有适合每个人的最佳值,因为它取决于与应用程序本身、需求模型、对错误的容忍度等相关的许多因素。
最后,您可以使用metrics-server来获取pod的CPU和内存使用情况。