Ubuntu
在 LXC 容器中執行的 Linux/Ubuntu 會理解 cgroup 記憶體限制嗎?
我打算租用一台物理伺服器並在該伺服器上的 LXC 容器中執行 MySQL。我想使用 cgroup 限制來控制 MySQL 實例的最大記憶體使用量:
lxc.cgroup.memory.limit_in_bytes = 8192M
這將有效地控制容器可能使用多少記憶體,但
top
或free
在容器內部仍會報告 LXC 主機(物理伺服器)的總體記憶體。我不是 Linux 如何管理一般記憶體的專家,但我假設 - 在物理機器上 - 如果 Linux 看到它即將達到物理記憶體限制,它將開始交換。Linux 是否以相同的方式處理“有效”記憶體限制(無論是 cgroup 限制還是物理限制),無論它是在容器內還是在物理主機上執行?
容器內沒有執行 Linux,因為 Linux 是核心,您與主機共享它。您的應用程序(如免費和頂級)從 /proc 讀取系統資訊,從而獲取有關主機的詳細資訊,因為預設情況下 lxc 不會偽造有限的資源(與例如 OpenVZ 相比)。這沒關係,除非您的應用程序根據 ram/swap/cpu 數量表現不同。如果您的應用程序嘗試分配比容器可用的記憶體更多的記憶體,它將像非容器環境中的任何其他應用程序一樣被 OOM 殺死。
如果要查看容器內有限的資源,請在主機上執行以下操作:
apt-get install lxcfs
之後重啟容器。LXCFS 將在容器的 /proc 中模擬一些文件,並且應用程序將正確地看到有限的資源(cpu、ram、swap)。
有關 lxcfs 首頁的更多資訊:https ://linuxcontainers.org/lxcfs/