Vagrantの仮想マシンのメモリ設定の方法と、メモリ設定値(仮想的なメモリ使用量)と実際に仮想マシンが使用するメモリ使用量について書いています。
※ 本ページはプロモーションが含まれています。
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をインストールしてある事が前提で説明していきます。
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に設定しています。準備ができたら仮想マシンを作成・起動します。
$ 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ファイルの中を見てみました。今度はVirtualBox.appを起動して、VirtualBoxマネージャーで確認してみます。
きっちり512MBになっていました。
最後に、macOSに標準でついているツール「アクティビティモニタ」で確認します。
アクティビティモニタは、プロセス単位で使用メモリ量などを確認できます。
(*Windowsなら、タスクマネージャーで確認できると思います。)
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 |
以上簡単でしたが、Vagrantfileでの仮想マシンのメモリ設定の方法と、実際に仮想マシンが使用するメモリ使用量の結果について書きました。
体感ですが、やっぱりメモリ設定を少なくして実際に使用するメモリ使用量が小さいほどPCの動作が軽くなった気がします。ただ、仮想マシンで使用するメモリ量を少なくしても、仮想マシン上で重いサービスを起動すれば反対に動作が重くなりそうなので、一概に設定でメモリ量を減らしたほうが良いとは言えないですね。このへんは仮想マシン単位で調整が必要になると思います。
また、VagrantにはLinked Clones機能があり、この機能を有効にすれば仮想マシンのディスク使用量を大幅に節約する事ができますし、仮想マシンの作成スピードも早くする事ができます。
Linked Clones機能については別ページで説明していますので、そちらを参考にしてください。
VagrantのLinked Clones(linked_clone)を有効にし、仮想マシンのディスク使用量を減らし、仮想マシンの作成時間を早くする