代码之家  ›  专栏  ›  技术社区  ›  Peter

如何减少的内存使用。NET Core docker容器?

  •  11
  • Peter  · 技术社区  · 7 年前

    microsoft/aspnetcore:1.1.2

    目前,我们的Web API也非常简单,最多有几个控制器从SQL Server中提取数据。它们没有显著的缓存或任何异常情况,但在运行时,可以使用500-900 Mb的RAM。这不是因为内存泄漏-每个容器的内存使用量随时间而稳定,在使用过程中上下变化10-15Mb。

    这种RAM使用水平应该是完全没有必要的-我如何减少它?

    Docker container memory use

    1 回复  |  直到 7 年前
        1
  •  13
  •   Peter    7 年前

    我尝试了几种方法来解决这个问题,并得到了来自的回应。NET核心团队,所以我将在这里记录,以防对其他人有用。

    1) 我已经成功地使用标志在Docker容器命令行上指定了内存限制,例如。 --memory="200m" --memory-swap="500m" ; 这可以用来控制内存使用并防止服务器意外耗尽内存,但我看到的是,容器所需的内存并没有显著减少,它只是被迫进行交换,这会降低API的性能。我没有试过 --memory="200m" --memory-swap="200m"

    2) 最佳解决方案。NET 1.1(如果需要限制内存)似乎是通过将 <ServerGarbageCollection>false</ServerGarbageCollection> 在中。csproj文件 PropertyGroup

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