저는 lxc를 사용하여 18.04 노트북에 우분투 16.04 개발 환경을 설정하고 있습니다. ninja -j
컨테이너에서 병렬 빌드를 수행 하면 컴퓨터가 응답하지 않고 복구되지 않습니다. 이런 일이 발생하면 다시 시작해야 합니다. 나는 이것이 모호하다는 것을 알고 있으며 이것이 메모리 사용량이나 호스트 시스템에서 구축할 때 더 잘 관리할 수 있는 다른 리소스와 관련이 있다고 생각합니다. 이 작업을 수행한 것을 기억하면 -j 4
(gnu 컴파일러) 잠기지 않습니다.
가장 간단한 방법으로 lxc를 설정했습니다. 루트로 실행해야 합니다. 저장소를 공유하기 위해 구성 파일을 사용하여 폴더를 "마운트"한 네트워크 장치에 액세스할 수 없습니다. 다음은 내 구성 파일입니다.
# 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 컨테이너를 구성하려면 어떻게 해야 합니까?
답변1
LXC 호스트에 메모리가 부족하여 시스템이 프로세스를 종료하는 것 같습니다. 여러 가지 옵션이 있습니다:
- 더 많은 메모리를 추가하거나 스왑 파일을 추가하거나 호스트에 대한 스왑을 늘립니다.
- LXC 개발 컨테이너를 하나 이상의 CPU 코어로 제한하여 병렬 닌자 빌드를 덜 공격적으로 만듭니다.
옵션 2의 경우 4코어 CPU가 있다고 가정하면 다음 LXC 명령은 컨테이너를 2개의 코어로 제한하고 해당 코어의 50%에 예약 시간을 제공해야 합니다(실제로 CPU 액세스가 75% 감소).
lxc config set container1 limits.cpu 2
lxc config set container1 limits.cpu.allowance 50%
( container1
위는 lxc 개발 컨테이너 이름입니다)
먼저 CPU 수를 조정합니다. 호스트의 메모리가 부족한 경우 "cpu.allowance" 명령이 문제에 미치는 영향이 적을 수 있습니다.
게스트 컨테이너에는 사용 가능한 CPU 코어가 더 적기 때문에 ninja는 더 적은 수의 병렬 빌드 명령을 실행해야 하므로 시스템 리소스(특히 메모리)를 덜 사용해야 합니다.
편집하다
LXD 명령을 사용하지 않고 이러한 변경을 수행하려면 컨테이너의 구성 파일을 편집하고 다음 줄을 추가하십시오.
lxc.cgroup.cpuset.cpus = 0-3
이는 컨테이너 코어 0과 3에 적용됩니다.
여기에 몇 가지 추가 내용이 있습니다.lxc cgroup 구성 매개변수 정보.