Linuxディストリビューションのメモリ消費量比較

私の少ない予算だとVirtual Machineのメモリが不足気味なので、メモリ消費量の少ないLinuxディストリビューションを探してみた。

AzureでB1sサイズのVirtual Machineを作成して、起動後しばらくしてからfreeコマンドでメモリ消費量を比較した。条件を揃えるためDockerデーモンとMicrosoft Azure Linux Agentは起動させている。

availableの差

このavailableのサイズが、いわゆる空きメモリのサイズと考えてよいだろう。

man free(1) - Linux manual pageによると、availableとは新しいアプリケーションの起動時にスワップせずに使えるメモリ量とのこと。

       available
              Estimation  of  how  much  memory  is available for starting new
              applications, without swapping. Unlike the data provided by  the
              cache  or  free fields, this field takes into account page cache
              and also that not all reclaimable memory slabs will be reclaimed
              due to items being in use (MemAvailable in /proc/meminfo, avail‐
              able on kernels 3.14, emulated on kernels 2.6.27+, otherwise the
              same as free)

manの記述を信じるならGentooは省メモリということになる。一方CoreOSはavailableが極端に少ないバックグラウンドで何か管理用のソフトが動いているのだろうか。

CoreOSについて

CoreOSはメモリ消費が少ないという情報があったので期待していたが、usedメモリは240MBということでいたって平凡である。availableも少ない。 この記事だとメモリ消費量は160M程度だと書かれているのだけれど。 qiita.com

totalの差

ちょっと興味深いのが、同じサイズのインスタンスなのにtotalメモリに差があること。 man freeによると、totalは/proc/meminfoMemTotalSwapTotalを参照している。

total  Total installed memory (MemTotal and SwapTotal in /proc/meminfo)

さらにMemTotalとは、man proc(5) - Linux manual pageによると、物理メモリから予約分とカーネルを差し引いたものだそうだ。

MemTotal %lu
       Total usable RAM (i.e., physical RAM minus a few reserved
       bits and the kernel binary code).

Gentoo Linuxはなぜかtotalメモリが多い。使用したGentoo Linuxは、特にカーネルをチューニングしているわけではなく、Hyper-Vとdockerのオプションを追加した程度である。

Gentoo LiveDVDのカーネルコンフィグは結構オプションが削減されているようで、vmlinuzのサイズはgentoo-sourcesベースが6.6MBで、LiveDVDベースが4.3MBだった。LiveDVDはオプションてんこ盛りになっているのと思ってたので意外。

ちなみに最初、Hyper-Vの動的メモリ割り当ての影響があるのかもと思ったが、Hyper-Vの動的メモリはusedで調整されるようだ。(メモリ割り当てが削減されるとusedが増える)

結論

意外とGentooが省メモリだった。

CoreOSは事前情報に反してメモリ消費が多くて、メモリが512MBのインスタンスだと起動すらできなかった。。。大きいインスタンス上での、複数のdockerイメージの運用を想定しているのだろうか。