AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 755795
Accepted
port5432
port5432
Asked: 2016-02-13 04:07:38 +0800 CST2016-02-13 04:07:38 +0800 CST 2016-02-13 04:07:38 +0800 CST

码头机器内存分配

  • 772

我们有一个相当复杂的 Rails 应用程序,即将部署到单个物理主机上。主机有 8 个内核和 128GB 内存。

该应用程序是 dockerised,具有 4 种类型的容器

  • 铁路公司 网络服务器
  • Postgres 数据库
  • Redis 数据库
  • 工作容器(Resque)

预计 Rails 和 Worker 容器将通过在 docker-machine 中引入更多容器来扩展。

在开发环境中,内存分配给整个 docker-machine:

docker-machine create -d virtualbox --virtualbox-memory 8192 default

是否可以控制单个容器的内存限制?

例如,为 Postgres 分配 16GB,但将 Rails 容器限制为 4GB。应该为运行 docker-machine 的服务器主机分配什么样的最小内存,这甚至可能吗?

编辑

相关问题:

如何处理 Docker 内存管理?

Docker + Apache,内存使用如何工作?

编辑 2

这个答案https://serverfault.com/a/645888/210752表明容器将根据需要分配内存。这不是我在开发环境中的经验(默认情况下,docker-machine 分配了 2GB)。

memory
  • 1 1 个回答
  • 11038 Views

1 个回答

  • Voted
  1. Best Answer
    Fira
    2016-02-15T10:24:10+08:002016-02-15T10:24:10+08:00

    正如您在第二次编辑中对问题的回答中提到的,容器与虚拟机不同,因为您通常不会像使用虚拟机那样为它们保留内存。因为它们都运行在同一个操作系统上,它可以根据需要将内存分配给不同的进程,就像它们不是在容器中运行一样。也就是说,内存是为所有进程池化的,而不考虑容器。

    您在上述示例中使用 docker-machine 设置的是“虚拟”主机的总内存池。在您的生产案例中,它将是整个 128 GB(除非您还计划使用 docker-machine 或 VM 对其进行分段)。

    但是,容器也是利用内核的cgroups(控制组)功能的好方法,它允许您为整个容器系统配置资源管理。这不会让您为容器“保留”内存,而是您可以为所有容器内存设置上限,这样就不会占用可用于其他容器的内存(例如,在发生泄漏或错误的情况下) )。

    使用 Docker,根据使用的容器后端,您可以设置基本内存限制,如下所示:

    • 运行 docker 的默认 libcontainer 时,使用-m或-memory选项运行容器
    • 运行旧版 LXC 提供程序时,通过使用 LXC 选项lxc.cgroup.cpuset.memory =amount 使用--lxc-conf运行容器

    您可以在此处找到有关 Docker 中 cgroups 使用的更多信息: https ://www.cloudsigma.com/manage-docker-resources-with-cgroups/

    这篇文章还包含介绍 cgroups 功能的幻灯片。

    • 4

相关问题

  • 不会将整个 XML 文件读入内存的命令行 XML 验证器?

  • 在 Windows Server 2008 中,为什么我的 BIOS 和计算机属性显示我安装的所有 RAM,但任务管理器没有?

  • 如何使用 vmstat 获取 % 内存使用率?

  • 规格相同但引脚不匹配的 DDR2 模块?

  • ECC RAM、后台清理和 IOMMU BIOS 设置

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve