これは何?
Ubuntuでswap領域を増やしてみたのでやり方とか調べたことをまとめました。
環境
- Ubuntu20.04
そもそもswapとは?
Swapとは個人的にわかりやすかったページを貼っておく。
コンピュータは基本的には
- CPU
- メモリ
- ストレージ
を使っている。
なぜ,メモリが必要なのかというと,ストレージよりも高速にアクセスすることができるためコンピュータの動作を早くすることができるためである。
では,swapとは何に使うのだろうか。
簡単に言うと,swapはストレージの領域を使ってメモリと同じように一時データを保存するのに使う領域である。
メモリが足りない際にメモリを増やすためにはハードウェア的にしか増やすことしかできないが,swapはストレージ領域を使うため簡単に増やすことができるのである。
そのため,メモリが足りないなと感じた際にはswap領域を増やしてやることでコンピュータのパフォーマンスを改善できる可能性がある。
swapを開放してみる
メモリが余っている場合にはswap領域のデータをメモリに移すことでコンピュータのパフォーマンスが改善されることが期待できる。
そのため,swapを開放してみる。
やり方としてはswapを一度無効化して再度有効化するだけである。
sudo swapoff -a
sudo swapon -a
-aはすべてを意味するオプション
swapの量を増やしてみる
適切なswapの量は?
一昔前はメモリの2倍のswap領域を確保するというのが主流な考え方だったらしいが,近年はメモリ自体の容量が増加して来たため,ベストプラクティス的なものは定まっていないらしい。
実際にLinuCの解答を見ると以下のように記述がある。
「2. スワップスペースは、必ずメモリサイズと同じサイズで作成する」
スワップスペースのサイズは、任意で決めることができます。
適正なサイズは実メモリと同等、または2倍と言われていました。
これは慣例的に、メモリデータをディスクで扱った場合に、スラッシングを起こさない程度の値と言われています。
ただし、このサイズ設計は、メモリサイズが小さく、また高価だった頃の名残とも言えます。
現在では、32GBや, 64GB, 128GBなど、大量のメモリを搭載するハードウェアも珍しくありません。
このような場合には、システム・ソフトウェアの特徴を踏まえて、スワップスペースの設計が必要になります。
RedHat Documentation1 4.2. システムの推奨スワップ領域
今回自分はハイバネートを使用しておらず,メモリが16 GBのため,4 GBで作成することにした。
ハイバネートとは: コンピュータの電源を切る際に、現在のシステムの状態(メモリ内のデータ)をディスクに保存し、次回起動時にその状態を復元する機能
有効か確認するコマンドを実行したところ自分のシステムでは無効になっていた。
sudo systemctl status hibernate.target 127
● hibernate.target - Hibernate
Loaded: loaded (/lib/systemd/system/hibernate.target; static; vend>
Active: inactive (dead)
Docs: man:systemd.special(7)
ちなみにハイバネートがサポートされているかは以下のファイルを参照すれば良いらしい。
cat /sys/power/state freeze mem disk
swapを増やしてみる。
まず,古いswapを削除した
sudo swapoff /swapfile # 古いswapファイルを無効化
sudo rm /swapfile
次に新しいswapを作成する。
sudo fallocate -l 6G /swapfile # swapファイルの作成
sudo chmod 600 /swapfile
sudo mkswap /swapfile # swapとして設定
sudo swapon /swapfile # swap領域としてマウント
free -h # 増加を確認
結構簡単にswap領域を増やすことができた。
まとめ
- swapはメモリの補助として使う。
- swapはストレージを使うために読み書きはメモリより早くない。
- swapを増やすのはソフトウェア的な対応で実施できる。コマンド打つだけなので超簡単だしお金がかからない。
感想
今まで2GBのswap領域を使い切るようなことは特になかったですが,PCがカクつくことはあったのでswap領域の最大値を倍にしたことでシステムがswapをより使うようになり,動作が安定しないか期待しています。
後ほどわかりやすい変化があれば記事を更新します。