gpt4 book ai didi

ubuntu - 如何减少 .NET Core docker 容器的内存使用量?

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:09 26 4
gpt4 key购买 nike

我们在 Docker/Ubuntu 上运行 .NET Core 1.1 容器,托管 Web API。这些容器基于 microsoft/aspnetcore:1.1.2,并为 Ubuntu x64 平台发布了二进制文件,并在构建镜像时复制,尽可能简单。

目前我们的Web API也非常简单,最多就是几个从SQL Server拉取数据的 Controller 。它们不做任何重要的缓存或任何不寻常的事情,但在运行时每个都使用 500-900 Mb 的 RAM。这不是由于内存泄漏——每个容器的内存使用随着时间的推移是稳定的,在使用过程中上下变化 10-15Mb。

这种级别的 RAM 使用应该是完全没有必要的 - 我怎样才能减少它?

我已经查看了 Docker container memory use问题,但它是不同的,并且在这一点上没有答案。

最佳答案

我已经尝试了几种方法来解决这个问题,并得到了 .NET Core 团队的回应,所以我会在此处记录以防它对其他人有用。

1) 我在使用标志在 Docker 容器命令行上指定内存限制方面取得了一些成功,例如。 --memory="200m" --memory-swap="500m" ;这可以用于控制内存使用并防止服务器意外耗尽内存,但我所看到的是容器所需的内存并没有显着减少,它只是被强制交换,这会降低性能API。我没试过--memory="200m" --memory-swap="200m" (即不允许交换)- 我会在有机会时这样做,我怀疑 API 会抛出内存不足异常,或者严重降级。

2) .NET 1.1 的最佳解决方案(如果您需要限制内存)似乎是通过输入 <ServerGarbageCollection>false</ServerGarbageCollection> 将 GC 切换到工作站模式。在 .csproj 文件中 PropertyGroup部分。在我的例子中,这将每个容器的内存使用量降低到 80-100mb。服务器垃圾收集旨在处理大规模并发期间的内存清理,因此如果您正在构建 API 或遇到这种情况的站点,这可能不是一个好的解决方案,但我们的 API 的并发用户数量很少,因此它似乎可以工作好吧。

长期,我从 CoreCLR 团队的@janvorli 那里得到了有用的回复。显然,此问题是由 .NET Core GC 中的错误引起的,该错误将在即将发布的 2.0.2 版本中修复。您可以阅读详细信息 this issue on the Github repo (搜索“ettery”)。

关于ubuntu - 如何减少 .NET Core docker 容器的内存使用量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46048445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com