(Vagrant)仮想マシンを起動するとPCの動作が重く(遅く)なるので、仮想マシンのメモリ使用量を設定してPCの動作を軽くする

Vagrantの仮想マシンのメモリ設定の方法と、メモリ設定値(仮想的なメモリ使用量)と実際に仮想マシンが使用するメモリ使用量について書いています。

目的と環境

最終更新日:2021/4/20

Vagrantで複数の仮想マシンを作成して起動していたらパソコンの動作がかなり重く(遅く)なったので、パソコンの動作を軽く(早く)する方法の1つとして、仮想マシンのメモリ使用量の設定をしてみたので、それについて書いています。また、メモリ設定値(仮想的なメモリ使用量)と、実際に仮想マシンが使用するメモリ量の差についても書いています。

◾️環境とバージョン情報です。
ホストPCのOS:macOS Big Sur(バージョン11.1)
Vagrant 2.2.7
VirtualBox 6.1.16

$ vagrant -v
Vagrant 2.2.7

$ VirtualBox -h
Oracle VM VirtualBox VM Selector v6.1.16

VagrantとVirtualBoxをインストールしてある事が前提で説明していきます。

メモリの設定を512MB、1GB、2GB、指定なしで仮想マシンを複数台起動して、メモリ使用量を確認してみる

Vagrantで仮想マシンを作成する時に、Vagrantfileでメモリの設定をできますので、その数値を色々変えて仮想マシンを起動して、実際に使用するメモリ量を調べてみたいと思います。

仮想マシンはVirtualBoxのUbuntu18.04(Box:hashicorp/bionic64)を使用します。
Vagrant環境にhashicorp/bionic64がない場合、まずは下のvagrant addコマンドでhashicorp/bionic64のBoxを追加します。

$ vagrant box add hashicorp/bionic64
==> box: Loading metadata for box 'hashicorp/bionic64'
    box: URL: https://vagrantcloud.com/hashicorp/bionic64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_desktop

Enter your choice: 2
==> box: Adding box 'hashicorp/bionic64' (v1.0.282) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/hashicorp/boxes/bionic64/versions/1.0.282/providers/virtualbox.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> box: Successfully added box 'hashicorp/bionic64' (v1.0.282) for 'virtualbox'!

途中でどの仮想マシンを使うかを聞かれますが、上では2のvirtualboxを選択しています。あと、Boxをダウンロードするので少し時間がかかります。

Boxの準備ができたら適当なディレクトリ上で、vagrant initを実行してVagrantfileを作成し、Vagrant環境を初期化します。

$ vagrant init hashicorp/bionic64

Vagrantfileが作成されたら編集します(見やすくするために、コメント文はすべて削除しています)。

$ cat Vagrantfile 
Vagrant.configure("2") do |config|
  config.vm.define "host1" do |host1|
    host1.vm.box = "hashicorp/bionic64"
    host1.vm.provider "virtualbox" do |vb|
      vb.memory = "512"
    end 
  end

  config.vm.define "host2" do |host2|
    host2.vm.box = "hashicorp/bionic64"
    host2.vm.provider "virtualbox" do |vb|
      vb.memory = "512"
    end 
  end

  config.vm.define "host3" do |host3|
    host3.vm.box = "hashicorp/bionic64"
    host3.vm.provider "virtualbox" do |vb|
      vb.memory = "512"
    end 
  end

end
Vagrantfileでは仮想マシン(Ubuntu18.04,hashicorp/bionic64)を3台起動し、3台ともメインメモリーは512MBに設定しています。
(*Virtualboxの仮想マシンのメモリの設定は、vm.providerメソッドのmemoryで設定できます。)

準備ができたら仮想マシンを作成・起動します。

$ vagrant up
〜
$ vagrant status
Current machine states:

host1                     running (virtualbox)
host2                     running (virtualbox)
host3                     running (virtualbox)
3台とも起動できましたので、実際にメモリ使用量を確認してみます。

メモリ使用量を確認する方法はいくつかあると思いますが、まずは仮想マシンにログインしてコマンドで確認してみます。

$ vagrant ssh host1
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)
〜
vagrant@vagrant:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:            481          66          88           4         327         398
Swap:           979           0         979

vagrant@vagrant:~$ cat /proc/meminfo | head
MemTotal:         493016 kB
MemFree:           90340 kB
MemAvailable:     408452 kB
〜
freeコマンドと/proc/meminfoファイルの中を見てみました。
481MB、493MBなので多少誤差はありますが、ほぼ設定どおりです。
上はhost1(仮想マシンの1台)の結果だけですが、残りの2台も同じ結果でした。

今度はVirtualBox.appを起動して、VirtualBoxマネージャーで確認してみます。
VirtualBoxのメモリ確認

きっちり512MBになっていました。

最後に、macOSに標準でついているツール「アクティビティモニタ」で確認します。
アクティビティモニタは、プロセス単位で使用メモリ量などを確認できます。
(*Windowsなら、タスクマネージャーで確認できると思います。)
macのアクティビティモニタでVirtualBoxのメモリ確認

VBoxHeadlessというプロセスが3つできて、各プロセスのメモリの使用状況は1.08GBでした。
Vagrantfileで設定したメモリ量が512MBなので、これはちょっと違います。どうやら、メモリ設定値(仮想的なメモリ使用量)と実際のメモリ使用量には差がありそうです。

とはいえ、これでなんとなくですがデータがとれました。同じ要領でベンチマークとして、Vagrantfileのメモリの設定(vb.memory)を、1024、2048でもやってみます。
また、メモリーの設定無しでもやってみます。メモリ設定なしのVagrantfileファイルです。
(Vagrantfileの初期状態では、メモリーの設定はしていません)

$ cat Vagrantfile 
Vagrant.configure("2") do |config|
  config.vm.define "host1" do |host1|
    host1.vm.box = "hashicorp/bionic64"
  end

  config.vm.define "host2" do |host2|
    host2.vm.box = "hashicorp/bionic64"
  end

  config.vm.define "host3" do |host3|
    host3.vm.box = "hashicorp/bionic64"
  end

end

結果をまとめた表です。

Vagrantfileのメモリ設定 VirtualBoxマネージャー free -m cat /proc/meminfo アクティブティモニタ
512MB 512MB 481MB 493MB 1.08GB
1024MB 1024MB 985MB 1009MB 1.76GB
2048MB 2048MB 1993MB 2041MB 1.84GB
設定無し 512MB 481MB 493MB 1.1GB
設定無し(GUI=true) 1024MB 985MB 1009MB 1.86GB

結果を見ると、やはりメモリ設定値(仮想的なメモリ使用量)と実際のメモリ使用量(アクティブティモニタの数値)には差がありました。

一番下の行に設定無し(GUI=true)とありますが、これは仮想マシンをGUIモードで起動した時の結果です。
GUIモードで起動する時は、Vagrantfileを以下のように編集します(config.vm.defineメソッドの部分だけ抜粋)。

config.vm.define "host1" do |host1|
  host1.vm.box = "hashicorp/bionic64"
  host1.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end 
end
そして結果としては、やはりGUIモードの時の方がメモリ使用量が多かったです。

デフォルトではGUIモードはオフになっていますが、もし必要もないのにGUIモードがオンになっていたら、無駄なメモリ使用をなくして動作を軽くするためにもオフにした方が良いと思います。

Vagrantfileでメモリ設定をしない時の仮想マシンのメモリ使用量はBoxによって異なります。Boxのマニュアルを見るか、実際に作成・起動する事で確認できると思います。

ちなみに、いくつかのBoxからメモリ設定無しで仮想マシンを作成・起動した時のメモリ使用量を調べてみましたので、結果を下に示しておきます。

Box OS アクティブティモニタのメモリ
hashicorp/bionic64 Ubuntu 18.04 LTS 1.1GB
bento/ubuntu-18.04 Ubuntu 18.04 LTS 1.07GB
bento/ubuntu-20.04 Ubuntu 20.04 1.28GB
bento/centos-7.3 CentOS 7.3 662MB

Linked Clones機能(linked_clone)を有効にし、仮想マシンの作成時間を早くする方法もある

以上簡単でしたが、Vagrantfileでの仮想マシンのメモリ設定の方法と、実際に仮想マシンが使用するメモリ使用量の結果について書きました。

体感ですが、やっぱりメモリ設定を少なくして実際に使用するメモリ使用量が小さいほどPCの動作が軽くなった気がします。ただ、仮想マシンで使用するメモリ量を少なくしても、仮想マシン上で重いサービスを起動すれば反対に動作が重くなりそうなので、一概に設定でメモリ量を減らしたほうが良いとは言えないですね。このへんは仮想マシン単位で調整が必要になると思います。

また、VagrantにはLinked Clones機能があり、この機能を有効にすれば仮想マシンのディスク使用量を大幅に節約する事ができますし、仮想マシンの作成スピードも早くする事ができます。

Linked Clones機能については別ページで説明していますので、そちらを参考にしてください。
VagrantのLinked Clones(linked_clone)を有効にし、仮想マシンのディスク使用量を減らし、仮想マシンの作成時間を早くする

アマゾンでDocker関連の本を探す [広告]