Hyper-VでAlpine Linuxのメモリ使用量をエディション別に比較してみた

令和の時代にMB単位でメモリについて語ることになるとは思いませんでした。

この記事を書くきっかけは、Hyper-VにインストールしたOpenWrtのメモリ量が設定した値と実際に使用可能な量が異なっていたからです。

メモリを増設できないミニPCでVMを数台運用すると少しでもメモリを節約したいと思うのが人の常。

以前はOpenWrtを256MBのメモリで運用していましたが、142MBまで削れることが判明し、しばらく144MBで運用していました。

しかし、ソフトウェアのインストール中に動きが怪しくなったため、メモリ不足が原因かと思い、160MBに増やして運用してみることにしました。そんな時、普段あまり気にしなかったOpenWrtのステータス画面を確認したところ、表示されているメモリが約134MBしかないことに気付きました。使用可能なメモリ量が異なっている。

差し引き26MBです。144MBに設定していたのなら、実際には108MBしか使用可能ではなかったわけです。

ルーターの使用ガイドラインには「128MB以上」と書かれていましたが、怪しい動きが出たのには納得の理由があったわけです。

さて、Alpine Linuxの話をしましょう。ダウンロードページを見ると、STANDARDやVIRTUALなどいくつかのエディションがあります。しかし不覚ながらVIRTUALが有る事に最近気づきました。エディションの詳細を読むとこう書いてあります。

alpin linuxのVIRTUALエディションの詳細
「カーネルのスリム化」、「仮想システム向けに最適化」、そそる一文です。

「標準に類似。カーネルがスリム化されている。仮想システム向けに最適化。」

VIRTUALのエディションが有る事を知らなかったので、今もですが、以前のバージョンのSTANDARDを使用して256MBのメモリでNginxを稼働させています。私しかアクセスしないので重くなる事やメモリが足りなくなって接続を遅く感じる事もなかったのでメモリについて特に気にしてなかったのですが、VIRTUALを試したらもっとメモリを削れるのでは無いか?と思ったわけです。

実を言うと、VIRTUALを投稿用にインストールして160MBで動かしていたので、現在稼働中のSTANDARDのVMも160MBまでメモリを減らして運用しようと試みました。しかし、起動すらしませんでした。

私は気づきました!間違いなくスリム化していると。

そして私の知的好奇心に火が付きました。

試したい!試したいぞ!と。。。

悪い癖が出てきました。長くなるんで話を進めます。

一応ですが、Alpine LinuxのインストールについてのWikiを読むと以下の様に書いてあります。

Minimal Hardware Requirements

Main article: Requirements

  • At least 128 MB of RAM. [A graphical desktop system may require up to 512 minimum.]. Note that an installation itself (from ISO) generally requires at least 320 MB during installation.

少なくとも128MBのRAMが必要です。「グラフィカルデスクトップシステムでは最低512MBが必要な場合があります。」なお、インストール自体(ISOから)には、通常少なくとも320MBが必要です。

と言う事なので、私はインストール時は320MBにしておいて、インストール後はメモリを減らして使用していました。

では、320MBのメモリでVIRTUALとSTANDARDのエディションで使用可能なメモリ量の比較をしたいと思います。

VIRTUALエディション320MB時のメモリ量は278.7MB
VIRTUAL(dmesgの一番下を確認すると320MBと認識されていますが、freeからはtotalに278.7MBと表示されています。
STANDARDエディション320MB時の使用可能なメモリ量は212.6MB
STANDARD(dmesgの一番下を確認すると320MBと認識されていますが、freeからはtotalに212.6MBと表示されています。)

比較を表にすると以下の様になります。

エディション(搭載メモリ)totalfreeavailable異次元に消えたメモリ
VIRTUAL(320MB)278.7MB187.2MB213.3MB41.3MB
STANDARD(320MB)212.6MB103.7MB150.0MB107.4MB
差し引き66.1MB83.5MB63.3MB66.1MB

VMに搭載したメモリ量を320MBに統一した場合、

マシンのメモリ搭載量(total)はVIRTUALの方が66.1MB多く認識されています。

空きメモリ(free)もVIRTUALの方が83.5MB多く余裕があります。

使用可能なメモリ(available)もVIRTUALの方が63.3MB多く利用可能です。

異次元に消えてしまったメモリ?がVIRTUALには41.3MBありますが、STANDARDより半分以上少なく、その差は66.1MBあります。

また、320MBのメモリ量で設定した場合、VIRTUALはマシンのメモリ搭載量(total)で256MB以上確保できるので、数字的にも少し安心できます。スリム化と最適化って凄いですね!一方で、STANDARDだと256MBも確保できず、320MBで設定したはずなのに何だかモヤモヤします。

次に160MBのメモリでVIRTUALを稼働させ、STANDARD_1をVIRTUALと同じ使用可能なメモリ量に成る様に設定し、STANDARD_2を起動可能な最小メモリに設定した場合で比較をしたいと思います。

VIRTUALエディション160MB時の使用可能なメモリ量は121.3MB
VIRTUAL(dmesgの一番下を確認すると160MBと認識されていますが、freeからはtotalに121.3MBと表示されています。)
STANDARDエディション194MB時の使用可能なメモリ量は121.1MB
STANDARD_1(dmesgの一番下を確認すると194MBと認識されていますが、freeからはtotalに121.1MBと表示されています。)
STANDARDエディション162MB時の使用可能なメモリ量は89.1MB
STANDARD_2(dmesgの一番下を確認すると162MBと認識されていますが、freeからはtotalに89.1MBと表示されています。)
エディション(搭載メモリ)totalfreeavailable異次元に消えたメモリ
VIRTUAL(160MB)121.3MB30.9MB60.6MB38.7MB
STANDARD_1(192MB)121.1MB12.0MB60.5MB70.9MB
STANDARD_2(162MB)89.1MB14.3MB29.0MB72.9MB
差し引き0.2MB / 32.2MB18.9MB / 16.6MB0.1MB / 31.1MB31.3MB / 34.2MB

表が分かり難くてすみません。結果を比較します。

VIRTUALのVMにメモリを160MBにした場合、マシンのメモリ搭載量(total)は121.3MBになります。その値に近いSTANDARDのVMを作った場合メモリを192MB使用します。32MB多めにして(total)の値がほぼ同じくらいになるのですが、空きメモリ(free)の量が半分以下になります。STANDARDでメモリを削って運用するのはかなり厳しく思えます。

VIRTUALのVMにメモリを160MBにした場合、STANDARも同じメモリ量でVMを作成した場合の比較をします。ただ、160MBではSTANDARDが起動しなかったので162MBで作成しました。

これについては何も言う事が無いですね。逆にSTANDARDのVMがよく起動したなと思うぐらいです。メモリを削った場合の空きメモリ(free)の値はVIRTUALもあまり余裕は無いですがSTANDARDはかなり厳しい状況です。

最後にVIRTUALで起動可能な最小メモリ量を試してみました。154MBで起動できましたがその場合の使用可能なメモリ量は115.3MBなのでAlpine Linuxの最小構成の128MBを満たしていません。

128MB以上にしたい場合は168MBに設定しましょう。その場合使用可能なメモリ量は129.3MBになります。

VIRTUALエディション168MB時の使用可能なメモリ量は129.3MB
VIRTUAL(dmesgの一番下を確認すると168MBと認識されていますが、freeからはtotalに129.3MBと表示されています。)

空きメモリ(free)の量が38.2MBしかないのでどこまで動くか分かりませんが、Nginxを稼働させながら様子見してみたいと思います。

結論

VMでAlpine Linuxを運用する場合は何も考えず素直にVIRTUALエディションを使いましょう。

今運用しているNginxとImmichも早くVIRTUALに切り替えたい。

追記(2025/03/01)

OpenWrtもAlpine Linuxもメモリをケチり倒して使っていましたが、320MBで運用が今の所自分の環境では安定していて正解な気がしてきました。オフィシャルでもそんな感じですしね。試しに動的メモリに変えて160MBから320MBで設定し、アイドル状態になった所でHyper-Vマネージャーで詳細を確認すると(画面下の「要約、メモリ、ネットワーク」タブが並ぶメモリタブを開く)

OpenWrtにAdBlockやWireGuradをインストール後のVMで261MB

Alpine Linux(STANDARD)でNginx Reverse Proxyを稼働させ257MB

Alpine Linux(VIRTUAL)でNginxをペライチのアクセスが分かるだけのWebサーバーを立ちあげて160MB 

今後は動的メモリで運用してみて、ちょうどいい所を探して固定に変えてみたいと思います。

コメントする