サーバーのメモリリソースが限界に達したときにスワップスペースはアプリケーションのクラッシュやデータロスを防ぎます。これはハードドライブ上の特殊な領域であり、メモリの緊急バッファとして機能します。ただし、読み書き速度は物理メモリに劣りますが、システムがプロセスを強制終了することを避けることができます。ここでは、CentOS 7上でスワップスペースを作成する方法を説明します。
環境準備
- CentOS 7オペレーティングシステム
- sudo権限を持つ非rootユーザー
- 利用可能なディスクスペース(少なくとも10GB推奨)
操作フロー
2.1 既存のスワップ設定を確認する
# スワップ使用状況の表示
swapon -s
# メモリとスワップの状態を表示(MB単位)
free -m
結果のスワップのtotal値が0である場合、まだスワップが設定されていません。
2.2 ディスクの利用可能なスペースを確認する
df -h
サンプル出力:
ファイルシステム サイズ 使用 可用 使用% マウント位置
/dev/vda1 59G 15G 42G 26% /
...
注意: スワップサイズは物理メモリの1〜2倍に設定することをお勧めします。メモリを集中的に使用するアプリケーションの場合、適切に増加させる必要があります。
2.3 スワップファイルを作成する(ここでは4GBとして)
# 誤削除を防ぐための専用ディレクトリを作成
sudo mkdir /swap_space
# ddコマンドを使用して互換性を確保(一部のファイルシステムではfallocateが効果的ではない場合があります)
sudo dd if=/dev/zero of=/swap_space/swapfile bs=1M count=4096
# セキュリティ上の理由からパーミッションを設定
sudo chmod 600 /swap_space/swapfile
2.4 スワップスペースを有効にする
# スワップファイルをフォーマット
sudo mkswap /swap_space/swapfile
# スワップをすぐに有効化
sudo swapon /swap_space/swapfile
2.5 設定を永続化する
sudo vim /etc/fstab
ファイルの末尾に以下の行を追加します:
/swap_space/swapfile swap swap defaults 0 0
高度なチューニングガイド
3.1 メモリ交換傾向性を調整する
# 現在のswappiness値を確認(デフォルトは30)
cat /proc/sys/vm/swappiness
# 一時的に推奨値(サーバーの場合は10-20)を設定
sudo sysctl vm.swappiness=20
# 永続的な設定
echo "vm.swappiness=20" | sudo tee -a /etc/sysctl.conf
3.2 ファイルキャッシュを最適化する
# 現在のキャッシュ圧力値を確認(デフォルトは100)
cat /proc/sys/vm/vfs_cache_pressure
# 推奨値に設定(SSDの場合は50、HDDの場合は80)
sudo sysctl vm.vfs_cache_pressure=80
echo "vm.vfs_cache_pressure=80" | sudo tee -a /etc/sysctl.conf
運用管理テクニック
4.1 リアルタイムモニタリングコマンド
watch -n 1 'free -m | grep Swap'
4.2 スワップを安全に無効化する
# スワップ内容を徐々に解放(メモリの突然の増加を防ぐ)
sudo swapoff -a
# 全てのスワップを再有効化
sudo swapon -a
swapoff -a コマンドは一時的にスワップを無効化しますが、CentOSサーバーの正常な動作には影響を与えません。
重要な注意点
- クラウドサーバーでの使用には注意が必要です: AWS/アリババクラウドなどのプラットフォームのSSDインスタンスでは、スワップの長時間使用がディスクの劣化につながる可能性があります。
- パフォーマンスボトルネック: スワップの頻繁な読み書き(si/so値が高い場合)はメモリのアップグレードを検討すべきです。
- ファイルの場所: スワップファイルは個別のパーティションまたは高速なディスクに配置することをお勧めします。
まとめ
適切にスワップスペースを設定することで、サーバーの安定性を向上させることができます。ただし、以下の点に注意してください:- スワップスペースはメモリ不足の最終的な解決策ではありません。
- 長い間スワップの使用率が高い場合はハードウェアのアップグレードを検討してください。
- 定期的に
free -mとvmstat 1を監視してメモリの圧力を理解してください。
| コマンド | 機能説明 | 例 |
|---|---|---|
| swapon | スワップを有効化 | swapon /swapfile |
| swapoff | スワップを無効化 | swapoff -a |
| mkswap | スワップをフォーマット | mkswap /swapfile |
| vmstat | スワップの監視 | vmstat 1 |