Ubuntu
在 lxc 容器上建構時電腦鎖定
我正在使用 lxc 在我的 18.04 筆記型電腦上安裝 ubuntu 16.04 開發環境。當我在容器上執行並行建構 (
ninja -j
) 時,我的電腦變得無響應並且永遠無法恢復。發生這種情況時,我必須重新啟動它。我知道這很模糊,我懷疑這與記憶體使用或其他一些在主機上建構時得到更好管理的資源有關。如果我記得做-j 4
(gnu 編譯器)它不會鎖定。我以最簡單的方式設置了 lxc,我必須以 root 身份執行它。它無權訪問網路設備,我使用配置文件在其上“掛載”文件夾以與它共享儲存庫。下面是我的配置文件:
# Distribution configuration lxc.include = /usr/share/lxc/config/common.conf # For Ubuntu 16.04 lxc.mount.entry = /sys/kernel/debug sys/kernel/debug none bind,optional 0 0 lxc.mount.entry = /sys/kernel/security sys/kernel/security none bind,optional 0 0 lxc.mount.entry = /sys/fs/pstore sys/fs/pstore none bind,optional 0 0 lxc.mount.entry = mqueue dev/mqueue mqueue rw,relatime,create=dir,optional 0 0 lxc.arch = linux64 # Container specific configuration lxc.rootfs.path = dir:/var/lib/lxc/u2/rootfs lxc.uts.name = u2 # Network configuration lxc.net.0.type = none lxc.net.0.flags = down # Share Display for gui applications lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file # Share folders lxc.mount.entry = /home/tyler/workspace /var/lib/lxc/u2/rootfs/home/ubuntu/workspace none bind 0 0
我的問題有兩個部分,如何隔離導致鎖定的原因,以及如何配置我的 LXC 容器以防止它在並行建構時鎖定我的電腦?
聽起來您的 LXC 主機記憶體不足,系統正在終止程序。你有幾個選擇:
- 添加更多記憶體或添加交換文件/增加交換到您的主機
- 將您的 LXC 開發容器限制為一個或多個 CPU 核心,以使並行 ninja 建構不那麼激進
對於選項 2,假設您有一個 4 核 CPU,按照 LXC 命令應該將您的容器限制為 2 個核心,並在其中 50% 的核心上給它調度時間(實際上減少了 75% 的 CPU 訪問)。
lxc config set container1 limits.cpu 2 lxc config set container1 limits.cpu.allowance 50%
(
container1
上面是您的 lxc 開發容器名稱)先調整CPU個數。如果您的主機記憶體不足,“cpu.allowance”命令可能對您的問題影響較小。
由於來賓容器可用的 CPU 核心更少,忍者應該啟動更少的並行建構命令,從而使用更少的系統資源(特別是記憶體)。
編輯
要在不使用 LXD 命令的情況下進行這些更改,請編輯容器的配置文件並添加以下行:
lxc.cgroup.cpuset.cpus = 0-3
這將給容器核心 0 和 3,調整以適應。
這是有關 lxc cgroup 配置參數的一些進一步閱讀。