ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

軽量Linux Alpine Linuxに切り替えた

VPN接続後の作業用踏み台サーバーとしてUbuntu ServerをインストールしたVMを提供していたのですが、KVMホストからみると、メモリーの使用率が稼働時間に比例して上がっていき張り付いたように見える問題が発生していました。

調査の結果、VMがメモリーを確保してキャッシュとして確保しているだけであることがわかりました。実際は使用していない状態でした。とはいえ確保していることはしているので、その分KVMホストからみれば物理メモリーは消費している状態になります。

ところで、踏み台サーバーに必要な条件は次の通りでした。

  • ネットワークがつながること
  • sshdが動いていること

というわけで、通称軽量Linuxに変えても良いと判断し、早速試しにAlpine Linuxをインストールしてみました。

alpinelinux.org

この記事を書いた時点で最新の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向けのバイナリーとか

frippery.org

Dockerのイメージとか

hub.docker.com

Linuxディストリビューションにもbusyboxというパッケージで提供されていることがあります。

起動直後の状態を比較

Ubuntu 18.04とAlpine Linux 3.9.0を比較してみました。それぞれ最小インストールを行い、sshdが動いた状態で比較しています。Alpine Linuxのメモリーが100MB以下で推移しているのが光りますね。ちなみに1日稼働しても、ほぼ変わらずといった感じでした。正直、単機能のアプリを動かすだけならAlpine Linuxはいい選択じゃないかなと思います。

Ubuntuの場合

f:id:ytooyama:20190131221158p:plain

Alpine Linuxの場合

f:id:ytooyama:20190131221226p:plain

ちなみにDockerやKubernetesではbusyboxが入っており、色々なネットワークの確認用のコマンドが利用できるという点で、busyboxイメージAipineイメージをよく使うようになりました。アプリケーションによってはないものもありますが、Dockerイメージのタグにalpineがついたものを使うと同じような恩恵を受けることがあります。積極的に使っていきたいと思っています。

例えばNGINXとか

https://hub.docker.com/_/nginx?tab=tags

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。