・SWAPはRAMの補助のため
・free、swaponコマンドでswap領域を確認
・swap用ファイルを作成、mkswap, swaponでスワップ設定
・/etc/fstabで起動時にswapを自動で設定
swapとは
スワップ(swap)とはメインメモリ(RAM)の補助のための保存領域です。
スワップはHDDやSSD上に作成されます。
RAMは高性能&高速ですが、高価なためあまり容量は確保されていません。
RAM容量を超えたRAMへの書き込みがあった際にRAM上の使われていない領域をいったんスワップに書き出してRAM容量を確保します。
スワップがないとRAM容量の空きが無くなり、RAMの空き容量を確保するためカーネルがプロセスをキルするOOM killerが発動したりして、サービスが停止するほか、最悪マシンがフリーズ、シャットダウンします。
参考 OOM Killer | 日経クロステック(xTECH)日経クロステック(xTECH)とはいえ、SWAPはあくまで一時的な退避場所。性能をswap使用前提の状態は改善の余地があります。
大容量のSWAPを作ればRAM容量は小さくてもよい?
RAMはSSDやHDDと比べてGB当たりの価格が高いのでたくさん入れるのはコストがかかります。
スワップが有ればRAM容量を超えても良いのであればスワップがRAMの代わりになりそうな気がしますが、スワップはRAMの代わりにはなりません。
HDDはもちろん高速といわれるSSDでもRAMと比べれば低速であるため、コンピュータの動作はその分遅くなります。
あくまでswapは補助的な利用になります。
PCゲームやマルチメディア編集など大容量のデータを扱うようなアプリケーションは多くのRAMを使用するので動作要件として大容量のRAMが必要になります。こうしたアプリケーション利用時や同時に多くのアプリケーションを利用している時に動作が重い場合はRAMの増量でパフォーマンスが改善できる場合が多いです。
swapの最適なサイズ
swapの最適サイズはRAMと同じサイズ~2倍くらい!
ただし、最近は大容量のRAM(256GBとか)を載せる場合もあるので2倍のswap領域を確保するのは大変
そこでRedhatは推奨swapサイズとしては8GBを超えるRAMの場合は最低4GBを確保すればよいと言っています。
参考 第15章 swap領域 Red Hat Enterprise Linux 7 | Red Hat Customer PortalRed Hat Customer Portalswapの確認 freeコマンド
swapを確認するにはfreeコマンドを使います。
# free
total used free shared buff/cache available
Mem: 948280 249580 37676 48336 661024 585836
Swap: 102396 46424 55972
swaponコマンドを使用しても確認できます。
swapの作成
swapの設定パターンは以下3つ
- swapファイルの設置(システムディスク上)
- swap専用パーティション(システムディスク上)
- システムとは別のディスクにswap領域を作成
昔はswap専用のパーティションを作成したり、別ディスク上に設置するということもありましたが、最近はRAM大容量化&ディスク高速化&swapは使用しない設計となっているため、同システムディスク上にswapファイルを設置して運用することが多いと思います。
また、HDDとSSDが混在してる場合はより高速なSSD上に設置したほうがよいでしょう。
複数のディスクにswapを分散させて高速化させる方法はHDDの場合は有効かもしれませんが、NVMeなどの高速なディスクにswapを設置する場合は体感できるパフォーマンスの向上は期待できないかもしれません。
swapファイルの作成
# dd if=/dev/zero of=/swapfile bs=1M count=1024
→1024MBのファイルをswapfileという名前で作成
# chmod 600 swapfile
→パーミッションの変更 root所有者以外に読み書きは許可しない
# mkswap /swapfile
→swapファイルのセットアップ
# swapon /swapfile
→swapの有効化
# vi /etc/fstab
/swapfile swap swap defaults 0 0
→再起動後もswapが有効になるようにfstabに記述
# free
→swapの確認
AWSのEC2インスタンスの多くはデフォルトではスワップがない状態なので自前で作成する必要があります。swap領域なしで利用しているとRAMがフルになったときに突然サービスが停止する場合があります。