今日のコマンド@swap領域の開放

昨日は休日だというのにサーバー担当者様
(お得意様)からのヘルプ信号をキャッチしました。
(メールが来ただけの話です。)

ヘルプ内容

freeコマンドで見ると、5GBあるSWAP領域が
結構使われている。
時々2.5GBとか使い、プロセスが終了しても
かなりの量がusedとして残っている。
量的には余裕があるが、再起動せずに
クリアする方法はないのか?

*SWAP領域がが大量に使われているのが
 帰宅後も気になってしかたがなかったようで、
 自宅からのメールをいただきました。

解説

実メモリが足りなくなると、メモリはcachedなどを
解放して対応しますが、対応が遅れるせいなのか、
このあたりからSAWPが発生します。
ユーザー数が多く、各ユーザーがプロセスを
起動させたり、メモリを大量に使うプロセスが
起動されたり、並列処理を連続させたりすると、
SWAPを大量に食い散らかすことはあり得ます。

プロセスが終了すると実メモリもSAWP領域も
リリースされるのですが、どちらも残骸を残し
全てが元の値にに戻ることはほぼ皆無です。

swap領域の開放の方法

やりかたは簡単で、単純にSWAPの使用を一度
ON・OFFするだけです。
物理メモリを4GB(実質3.5GB)、SWAPが5GBの
サーバーで実際にやってみます。
拙宅サーバー環境でSWAP領域を2GB以上使うことは
あり得ないので、とにかくSWAPが発生するような
メモリ喰いのプロセスをどんどん起動するような
スクリプトを書いて、SWAPのusedを2.5GB程度まで
食い散らかしてみましたが、後から考えると
ここでSWAP領域の解放を解説するだけなら
クライアント様の数値と同じにする必要は
なかったですよね。@後の祭り・・

まずfreeコマンドでメモリの使用状況を見ます。

# free
    total   used     free
Swap: 5241844  2778726   5237104
(SWAP部分だけ抜粋表示)
SWAP ON・OFFのコマンドを実行します。

# swapoff -a && swapon -a

コメンドの効力や如何に?

# free
    total   used   free
Swap: 5241844   0   5241844

見事usedがゼロになりました。

振る舞い

このときメモリやSWAPはどのような振る舞いを
しているのでしょう。

freeコマンドでは分からないのでtopを使います。
ターミナルを2つ立ち上げてそれぞれでログインし、
片方ではtopコマンドでメモリの変化を見ながら、
もう一方でON・OFFのコマンドを叩くと、メモリは
以下のように変化するのが分かります。

— OFFの振る舞い —

・SWAPのfree領域がゼロになる。
・usedとtotalが同じ値となり段階的に減っていく。
・減った分は実メモリのusedが増えてゆく。
・totalとusedがゼロになる。

— ONの振る舞い —

・totalが5241844と表示される。
・usedがゼロとなる。
(使用状況では完全にゼロにならない時もある。)

これらの変化で分かるのは、いきなりSWAP領域を
無くしてしまうわけにはいかないので、SWAP領域を
新たに使えないようにして、抱いているデータを
実メモリに移行する作業が行われているということです。

注意

SWAP領域の使用量が実メモリの空き容量を上回る場合、
コマンドを実行すると、移せるわけネェだろう!って
怒られちゃいますので、エラーを吐かれないためは、
事前にcacheをクリアしたり、メモリを食っている
プロセスを終了させ、移行させる領域を確保する
必要が有ります。

後記

2.5GBもSWAP領域を使う・・・
拙宅サーバーの使用状況では考えられませんので、
このコマンドはSWAP領域を新たに作成するや
別途作成して不要になって削除するとき等
以外にはあまり使わないのですが、こんな
使い方もできるということです。

このコマンド実行後は、topコマンドなどのツールで
通常の運用状況による物理メモリやSWAP領域の変動を
監視してしてみれば傾向が分かります。

HOME

おすすめ