以下はlinux使いによるめも書きです
ご自由にお使いください
First of all
以下で状態確認
sudo swapon -s
これでオン/オフ
-pオプションはpriorityで高いデバイスが優先して使われる
sudo swapon /dev/sdaX -p -2
sudo swapoff /dev/sdaX
簡易的なスワップファイルによるスワップの有効化
スワップファイルによるスワップは以下のようにする(例は1GiBのファイル)
本来なら/swapfileではなくパーティション/dev/sdaXなどにすべきだがパーティションをいじるのがやや面倒くさいクラウド環境等では重宝する
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
永続化
/etc/fstab に追加
/swapfile none swap sw 0 0
有効化
sudo swapon -a
free -h
swappiness
swappinessはおおきくなるほど不要なメモリーをディスクに追い出すようになる
デフォルトだとおおきくすぎてメモリーが余っていてもスワッピングしてしまうのでちいさくする
/etc/sysctl.d/local.conf
vm.swappiness = 10
以下で有効化
sudo sysctl -p /etc/sysctl.d/local.conf
確認
sysctl -n vm.swappiness
一時的であれば以下でもよい
sudo sysctl -w vm.swappiness=10
/proc/sys/vm/swappinessで設定することも可能だがやや古い書き方だと思う
zram
CPUを使った圧縮により、より多くのメモリーが載っているように見せるモジュール
以前はzswapもあったが取り扱いのしにくさから現在はzramが主流のよう
標準で入ってることもある
以下で確認
なお普通にマウント/アンマウントできる
マウントされていない場合は2つ目のコマンドでみつけられる
zramctl
zramctl --find
再設定する場合は以下でまずリセット
sudo swapoff /dev/zram0
sudo zramctl -r /dev/zram0
以下で使われていないzramデバイスを探し出して設定する
sudo zramctl --find -a lz4 --size 512M --streams 4
sudo mkswap /dev/zram0
sudo swapon /dev/zram0 -p 100
アルゴリズムは以下で確認/設定できる
cat /sys/block/zram0/comp_algorithm
lzo lzo-rle [lz4] lz4hc 842 zstd
永続化
起動時に自動でzramをセットアップするサービスが存在する
/etc/systemd/zram-generator.conf
[zram0]
zram-fraction = 1.0
max-zram-size = 512
swap-priority = 100
compression-algorithm = lz4
起動中に再設定するにはswapoffした後以下のコマンドを実行する
sudo /usr/lib/systemd/system-generators/zram-generator --reset-device zram0
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0.service
以下でloadされているか確認
sudo systemctl status systemd-zram-setup@zram0.service
lz4 (おまけ)
lz4は高速性に重きをおいた圧縮アルゴリズムである
圧縮はしたいが速度を犠牲にしたくない場面でよく用いられる
最近はzstd(ZStandard)も人気
高速な圧縮はsnappyなどがはじまりだろうと思う
ドラゴンクエストXは「世界は一つ」を実現するためにどのようなサーバ構成にしているのか?
『大乱闘スマッシュブラザーズ SPECIAL』容量とビルド時間圧縮に立ち向う方法が語られたCEDECセッションレポ【CEDEC 2019】
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる | PPT
earlyoom
linuxにはOOM(Out of Memory)機能がありメモリーが満杯になると不要なプロセスをキルするようになっているがギリギリにならないと機能しない等あまり使い勝手がよくないので予防的にOOMするデーモンが存在する(Fedora等には標準搭載)
/etc/default/earlyoom
EARLYOOM_ARGS="-r 0 -m 7,1 -s 10 --prefer '^(process_name_low_priority)$' --avoid '^(process_name_high_priority)$'"