症状
在 Linux Docker 容器中运行 Microsoft SQL Server 2017 实例时,可能会收到内存不足的错误消息。
原因
当未启用 memory.memorylimitmb 配置时,Linux 上的 SQL Server 默认使用总物理内存的 80% 的软限制;对于 Docker 容器,SQL 过去会考虑主机内存总内存的 80%,而不是将自身限制为分配给 docker 容器的 80% 内存。 这种不正确的内存限制允许 SQL Server 尝试消耗超过容器可用内存的内存,并可能导致 OOM Killer 终止。
备注 创建 Docker 映像时,必须指定 –m 来限制 Docker 内存。 有关详细信息,请参阅以下文章。
解决方法
此问题的修补程序包含在 SQL Server 的以下更新中:
备注如果未配置 memory.memorylimitmb 配置,则此修补程序允许 SQL Server 将自身限制为分配给容器的内存的 80% 的软限制。
关于 SQL Server 内部版本
SQL Server 的每个新内部版本都包含先前内部版本中的所有修补程序和安全修补程序。 我们建议您安装 SQL Server 的最新版本:
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
参考资料
了解 Microsoft 用于描述软件更新的标准 术语 。