swappiness と zram を使ったSWAPメモリ設定
設定した背景
私の環境では、Q4OS を メモリ4GB で使用していました。
(現在は 8GB に増設済みなので記事中の内容はメモリ8GBとなっています)
普段は問題ないのですが、
- ブラウザでタブを多数開く
- 複数のアプリを同時起動する
- 画像編集やOffice系アプリを並行使用する
といった使い方をすると、明らかに動作が緩慢になることがありました。
「CPUが遅いのかな?」と思い調べてみると、
原因はどうやら メモリ不足によるSWAPの頻発 のようでした。
free -h や htop で確認すると、
- 物理メモリがほぼ使い切られている
- ディスクswapが頻繁に発生している
という状態。
ハードディスク(SSDではなく)へのswapはやはり遅く、これが体感速度を落としていました。
そこで、
- メモリ管理の調整(swappiness)
- RAMを圧縮して活用する zram
を導入することにしました。
swappiness とは?
swappiness は、
「どれくらい積極的にswap
を使うか」
を決めるカーネルパラメータです。
確認方法:
cat /proc/sys/vm/swappiness
一般的なデフォルト値は下記のようです。
60
目安
| 値 | 動作 |
|---|---|
| 10〜20 | できるだけRAMを使う |
| 60 | 標準 |
| 80以上 | 積極的にswap使用 |
SSD環境や zram を使うなら、やや高めでも問題ありません。
設定方法
一時的に試すなら
sudo sysctl vm.swappiness=10
問題なさそうであれば永続化します
sudo nano /etc/sysctl.d/99-swappiness.conf
中身
vm.swappiness=10
保存 → 再起動 します。または下記を実行します。
sudo sysctl --system
zram とは?
zram は
メインメモリ(RAM)上に圧縮された仮想スワップ領域を作る仕組み
です。
つまり、
- ディスクに書かない
- RAMを圧縮して疑似的に増やす
- 高速
というメリットがあります。
例えば:
- 8GB RAMのうち
- 1GB zramに割当
- 圧縮率 約2倍
→ とすると実質 約10GB相当 になるケースもあります。
systemd で zram を自動起動する方法
方法は2通りあります。
【方法1】unit に直接書く方法
unit 作成
sudo nano /etc/systemd/system/zram-autosetup.service
内容
[Unit]Description=Setup ZRAM swapAfter=multi-user.target[Service]Type=oneshotExecStart=/usr/bin/bash -c 'modprobe zram; echo 1G > /sys/block/zram0/disksize; mkswap /dev/zram0; swapon -p 100 /dev/zram0'RemainAfterExit=yes[Install]WantedBy=multi-user.target
有効化
sudo systemctl daemon-reloadsudo systemctl enable zram-autosetupsudo systemctl start zram-autosetup
確認
sudo swapon --show
結果
NAME TYPE SIZE USED PRIO
/dev/sda2 partition 21.4G 268K -2
/dev/zram0 partition 1024M 0B 100
/dev/zramが出来てればOKです。
⚠ デメリット
上記の方法で、ExecStart に長いコマンドを書くと、oneshot サービスで失敗する場合があります。
ただし、自分は上記で設定しました。
【方法2】スクリプトに分ける(おすすめ)
より安定して動作します。
① systemd unit
/etc/systemd/system/zram-autosetup.service
中身
[Unit]Description=Setup ZRAM swapAfter=multi-user.target[Service]Type=oneshotExecStart=/usr/bin/zram-setup.shRemainAfterExit=yes[Install]WantedBy=multi-user.target
② スクリプト作成
sudo nano /usr/bin/zram-setup.sh
内容
#!/bin/bash# zram 512MBmodprobe zramecho 1G > /sys/block/zram0/disksizemkswap /dev/zram0swapon -p 100 /dev/zram0
実行権限を付与
sudo chmod +x /usr/bin/zram-setup.sh
③ 有効化
sudo systemctl daemon-reloadsudo systemctl enable zram-autosetupsudo systemctl start zram-autosetup
④ 動作確認
swapon --show
どれくらいのサイズが適切?
目安:
| RAM | zram サイズ |
|---|---|
| 4GB | 512M〜1G |
| 8GB | 1G |
| 16GB | 2G |
大きくしすぎるとCPU負荷が上がるため、様子を見ながら調整するとよいでしょう。
まとめ
✔ 4GB環境ではswap頻発で動作が重くなりやすい
✔ zramでディスクI/Oを減らせる
✔ swappinessと組み合わせると効果的
✔ systemd自動化で管理が楽
メモリを増設した現在(8GB)でも、zramは保険として有効にしています。
正直なところ、Q4OS自体が軽量でも、Google Chromeなどを使用した場合には、メモリを多めに使用するので8GBはあったほうがいいかと思います。
下図はの記事を作成しながら、Chromeや他のアプリを立ち上げた状態でfreeで確認した値です。
total(メインメモリ)が8Giで、availableが4.2Giなので、メインメモリが4GiだとSWAPが発生しだすかと思われます。

恒久的にはHDDをSSDに交換する対策もありますが、現状は上記で運用しています。
ひとまず、古いPCを延命させたい方には、上記はかなりおすすめの設定です。
-160x90.png)
-120x68.png)

コメント