VPN接続後の作業用踏み台サーバーとしてUbuntu ServerをインストールしたVMを提供していたのですが、KVMホストからみると、メモリーの使用率が稼働時間に比例して上がっていき張り付いたように見える問題が発生していました。
調査の結果、VMがメモリーを確保してキャッシュとして確保しているだけであることがわかりました。実際は使用していない状態でした。とはいえ確保していることはしているので、その分KVMホストからみれば物理メモリーは消費している状態になります。
ところで、踏み台サーバーに必要な条件は次の通りでした。
- ネットワークがつながること
- sshdが動いていること
というわけで、通称軽量Linuxに変えても良いと判断し、早速試しにAlpine Linuxをインストールしてみました。
この記事を書いた時点で最新のAlpine Linuxは3.9.0で、次のような構成のLinuxディストリビューションです。パッケージ管理はapk
というコマンドを使います。
- Linux 4.19
- GCC 8.2.0
- Busybox 1.29
- musl libc 1.1.20
インストールは簡単で、ISOイメージでブートしてsetup-alpine
コマンドを実行し、質問に答えていくだけの簡単設計です。GNUtilsではなくBusybox、GLibcではなくmusl libcが入っていることが特徴です。
Busyboxは色々なコマンドを寄せ集めしたものです。組み込み向けによく使われますが、様々な環境向けにバイナリーを提供されています。
例えばWindows向けのバイナリーとか
Dockerのイメージとか
Linuxディストリビューションにもbusyboxというパッケージで提供されていることがあります。
起動直後の状態を比較
Ubuntu 18.04とAlpine Linux 3.9.0を比較してみました。それぞれ最小インストールを行い、sshdが動いた状態で比較しています。Alpine Linuxのメモリーが100MB以下で推移しているのが光りますね。ちなみに1日稼働しても、ほぼ変わらずといった感じでした。正直、単機能のアプリを動かすだけならAlpine Linuxはいい選択じゃないかなと思います。
Ubuntuの場合
Alpine Linuxの場合
ちなみにDockerやKubernetesではbusyboxが入っており、色々なネットワークの確認用のコマンドが利用できるという点で、busyboxイメージやAipineイメージをよく使うようになりました。アプリケーションによってはないものもありますが、Dockerイメージのタグにalpineがついたものを使うと同じような恩恵を受けることがあります。積極的に使っていきたいと思っています。
例えばNGINXとか