echo 1 > /proc/sys/vm/drop_cachesがすごい件

MySQL+MyISAMを使っていて不思議だなーと思ったのが
MySQLをSTOPさせてもメモリのFreeがほとんど戻らないということ

たとえば、MySQLが起動していてそこそこ動かしていると
モリーのFreeはほとんどない状態になって
ある意味、いい感じでうごいているわけですが

# free
             total       used       free     shared    buffers     cached
Mem:      16432240   16331988     100252          0      11268   16030644
-/+ buffers/cache:     290076   16142164
Swap:      2031608     119248    1912360

この状態でMySQLを止めてもFreeが戻らないことがままあります

# /etc/init.d/mysql stop
Shutting down MySQL...                                     [  OK  ]

# free
             total       used       free     shared    buffers     cached
Mem:      16432240   16220336     211904          0      11424   16033120
-/+ buffers/cache:     175792   16256448
Swap:      2031608      71752    1959856

どうもテーブルをページキャッシュに乗ってしまっているためのようでして
せっかくMySQL stopしたならメモリもきれいになっていてもらいたいところ・・

そこで
echo 1 > /proc/sys/vm/drop_caches
を使うといいです。

# echo 1 > /proc/sys/vm/drop_caches

# free
             total       used       free     shared    buffers     cached
Mem:      16432240     107460   16324780          0        596       9596
-/+ buffers/cache:      97268   16334972
Swap:      2031608      71744    1959864

思いっきりメモリが戻りました〜

ってことで、MySQLを止めるときはここ最近はこんな感じで止めてたりします。

/etc/init.d/mysql stop;sync;sync;echo 1 > /proc/sys/vm/drop_caches;/etc/init.d/mysql start

syncはもう昔のクセみたいなおまじないみたいなもんですねwww


参考にさせていただいたページ:
http://lab.tricorn.co.jp/okt/204
(目からうろこでした!ありがとうございます!)