[Linux]Swap領域をクリアする方法
単純にサーバ再起動してもよいのだけど、それだと作業中のEmacsが落ちてしまうので開発効率がおちる。
サーバ再起動させずにSwapを空にする方法はないかと試行錯誤してみたら、うまくいきました。
メモリに空き容量がある場合
Swap usedの容量よりも実メモリの空き容量の方が大きい場合、単純にスワップをoffにしてonにすれば解決します。swapoff -a && swapon -a
(swapoffコマンドが見つからない場合は /sbin/swapoff などをあたってみてください。)
メモリに空き容量がない場合
「スワップをoffにする」とは、ディスクに退避されてるデータをメモリに移動させることです。なのでメモリの空き容量が足りない場合はswapoffが失敗します。
"swapoff failed: Cannot allocate memory"
このエラーが出た場合は次のようにして対処します。
まずメモリ使用量の多いデーモン類、使ってないプロセスを全て終了させる。
topコマンドをたたいてRES値順にソートして、RES値の大きいものから終了させていきましょう。メモリのキャッシュ領域を解放させる
sync
echo "3" > /proc/sys/vm/drop_caches
# しばらく待ってから、
echo "0" > /proc/sys/vm/drop_caches
ちなみにsudoでリダイレクトする場合は下記のようにします。
sudo sh -c "echo 0 > /proc/sys/vm/drop_caches"
さてここまでやって、Swap usedの容量 < 実メモリの空き容量 となったら、晴れて最初のswapoff -aが成功するはずです。
カテゴリ:
Linux