Linuxでのswap領域の解放、メモリのキャッシュ領域の解放

はじめに

こんにちは、野村です。

Linuxをデスクトップとして使っていると、動作が重くなってくることがあります。
VirtualBoxなどの仮想環境で使うとなるとなおさら。
原因はわかりきってる。メモリを十分に割り当てることができないから。

僕の環境では、ホストPCの物理メモリは8G。
ゲストPCへの割り当ては2Gを目安にしてます。
ゲストPCを複数起動させることを考慮すれば、そのくらいが上限かも。

とにかく動作が重いときは、コマンド「free -m」でswapの使用量を調べましょう。
いっぱいいっぱいになってませんか?

swap領域の解放

そんなときは、スワップをoffにしてonにすればOK。

$ sudo swapoff -a && sudo swapon -a

ただ、swapの使用容量がメモリの空き容量を超えている場合、swapoffに失敗します。
エラーメッセージはこんな感じ。

swapoff failed: Cannot allocate memory

メモリのキャッシュ領域の解放

swapoffに失敗した場合、メモリのキャッシュ領域を解放した後にswap領域を解放します。

方法はこんな感じ。管理ユーザになって以下のコマンドを実行します。

# sync
# echo 3 > /proc/sys/vm/drop_caches

実は、drop_cachesを使ったメモリ解放は非奨励とのこと。本番環境で使わなきゃいいや。
あと、どうやら全体的なパフォーマンスが低下するらしいです。
いまのところ、デスクトップとして使う分には気にならないな。

終わりに

以上、swap領域の解放方法とメモリのキャッシュ領域の解放方法を紹介しました。

コマンドを打つのが面倒であれば、~/.bashrc などにエイリアスを設定しておけばいいかも。

alias swap='sudo swapoff -a && sudo swapon -a'
alias cclear='sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"'

「swap」を実行して失敗すれば、「cclear」を実行してから再度「swap」を実行すればいい。

ところで、「開放」と「解放」、メモリに用いる場合、どちらを使えばいいのか悩みました。
「開放」の対義語は「閉鎖」、「解放」の対義語は「束縛」。
swapに格納されているデータは「束縛」されているのだろうか?

というわけで、今回はこれにて。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

野村 野村のプロフィール
メインPCはWindows10のVirtualBox上のFreeBSD。Linux/Unixの小ネタを求めて日々右往左往してたりする。