メモリの少ないマシンを無理やり使うには earlyoom が便利

貧すれば鈍す

悩む前にメモリを増設しよう

大前提として,足りないメモリをなんとかやりくりして使うというのは悪いアイデアです。

メモリモジュールの価格などたかが知れています。生産的な用途であれば生産性の向上ですぐにお釣りがくるのはもちろん,完全なホビー用途であっても,他の大抵の出費より効用が高いはずです。

増設ができなければ,Swap を活用しよう

一方,ハードウェアの設計ないしそれ以外の原因に起因して,メモリの増設ができない場合もあります。

メモリの増設ができない場合,次に検討すべきは Swap の活用です。

Swap 領域がない場合はまず作成しましょう。HDD の場合はシリンダのなるべく外周にパーティションを確保します。SSD の場合は,パーティションよりもファイルとして領域を確保するのがおすすめです。その場合,さほどの信頼性が要求されない用途では,swapspace を使うのが便利です。Debian や Ubuntu の場合はレポジトリに収録されています。

# apt update
# apt install swapspace
# systemctl enable swapspace

Swap ファイルを自動的に構成してくれる上,容量も使用状況に応じて動的に確保してくれるので簡便です。

Swap のパフォーマンス向上のための施策も検討すべきです。たとえば,内蔵ドライブが HDD であるなどで Swap が実用的でない場合,SSD を外付けで接続し,そこで領域を確保するという手もあります。

内蔵ストレージの耐久性が低すぎるなどで Swap を利用したくない場合でも,Swappiness を下げることで極力ストレージ寿命へのインパクトを減らすことができます(1 が最小です。0 は,Linux Kernel 3.5-rc1 以降,Swap を使用しないという意味になっています)。

# vi /etc/sysctl.conf
vm.swappiness = 1
# sysctl -p

1 だと間に合わずハングアップする場合があるので,信頼性を重視する場合は 10 以上にすると安全です。

それもだめなら……

しかし,内蔵ストレージが遅すぎたり耐久性が低すぎたりする一方で外付け SSD を接続することも現実的でない場合など,Swap の活用もできない場合がありえます。

earlyoom とは?

仕組み

earlyoom は裏技的なツールであり,メモリが一杯になるやいなやユーザプロセスを見境なしに kill するというものです。

カーネルの OOM はデスクトップユースではうまく機能しないところ,earlyoom を使えばメモリが一杯でハングアップする事態を確実に防げます。

もちろん副作用は甚大で,メモリの足りない環境ではアプリケーションが変なタイミングで死にまくり,よくわからない挙動をしたりします。

※いま気づいたのですが,Gocryptfs と同じ作者さんのようですね。技術力はもちろん目の付け所もすごい。

使ってはいけない用途

あたりまえですがサーバ用途に使うのは論外です。

クライアント用途であっても,ローカルで動作するアプリケーションの利用が主である場合,作業途中のデータが破損しますので,使うべきではありません。

使ってもよい用途

クライアント用途で,利用するのが主にウェブブラウザ越しに利用するクラウドベースのサービスであれば,変更されたデータはサーバサイドで適宜自動保存するので,作業の途中でプロセスが死んでもそれほど影響がありません。

しかも,モダンなブラウザはマルチプロセスに対応しているので,実際にレンダリングしているプロセスが kill されても UI はそのまま残り,タブがクラッシュするだけで済む場合が大半です。

このように,限定的な状況下においては,かなり有用なツールです。

このブログでも以前,USB ドライブがシステムドライブであるシングルボードコンピュータの La Frite を活用するという趣旨で earlyoom を使ったことがあります。

earlyoom の導入方法

Debian・Ubuntu

Debian や Ubuntu であれば,標準レポジトリに収録されていますので,簡単に導入できます。以下のコマンドで自動的に有効化されます。

# apt update
# apt install earlyoom
# systemctl enable earlyoom

コメントを残す

投稿にあたり,完全な IP アドレスが保存されます(公開されません)。

コメントはスパムフィルタで処理され,承認後に公開されます。