lxc コンテナでビルドするとコンピュータが停止する

lxc コンテナでビルドするとコンピュータが停止する

私はlxcを使用して18.04ノートブックにUbuntu 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

私の質問は2つの部分で構成されています。ロックの原因をどのように分離できるか、並列ビルドを実行するときにコンピュータがロックされないようにLXCコンテナを設定するにはどうすればよいですか?

ベストアンサー1

LXCホストにメモリが不足しているため、システムがプロセスを終了しているようです。いくつかのオプションがあります。

  1. より多くのメモリを追加したり、スワップファイルを追加したり、ホストへのスワップを増やしたりします。
  2. LXC 開発コンテナを 1 つ以上の 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構成パラメーター情報。

おすすめ記事