Linux(Q4OS)でメモリを有効活用する

Linux

swappiness と zram を使ったSWAPメモリ設定


設定した背景

私の環境では、Q4OS を メモリ4GB で使用していました。
(現在は 8GB に増設済みなので記事中の内容はメモリ8GBとなっています)

普段は問題ないのですが、

  • ブラウザでタブを多数開く
  • 複数のアプリを同時起動する
  • 画像編集やOffice系アプリを並行使用する

といった使い方をすると、明らかに動作が緩慢になることがありました。

「CPUが遅いのかな?」と思い調べてみると、
原因はどうやら メモリ不足によるSWAPの頻発 のようでした。

free -hhtop で確認すると、

  • 物理メモリがほぼ使い切られている
  • ディスク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 swap
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/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-reload
sudo systemctl enable zram-autosetup
sudo 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 swap
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/bin/zram-setup.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

② スクリプト作成

sudo nano /usr/bin/zram-setup.sh

内容

#!/bin/bash
# zram 512MB

modprobe zram
echo 1G > /sys/block/zram0/disksize

mkswap /dev/zram0
swapon -p 100 /dev/zram0

実行権限を付与

sudo chmod +x /usr/bin/zram-setup.sh

③ 有効化

sudo systemctl daemon-reload
sudo systemctl enable zram-autosetup
sudo systemctl start zram-autosetup

④ 動作確認

swapon --show

どれくらいのサイズが適切?

目安:

RAMzram サイズ
4GB512M〜1G
8GB1G
16GB2G

大きくしすぎると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を延命させたい方には、上記はかなりおすすめの設定です。

コメント

タイトルとURLをコピーしました