はじめに
linux環境で、なんか動作がもっさりしてきたな〜って時にめもりが原因だった場合の対処法。
その前に
まずメモリの話から。と言っても当方そっちの専門家じゃないので、詳しい人に聞いた感じ。
そもそもメモリって
PCにおいて主な計算はCPUによって行われています。しかし、CPUはHDDやSSDなどの記録媒体から直接データを読み込んだり計算したりはできないのです。そこでメモリは、一時的に記憶媒体などからデータを読取り、CPUが計算できる様にする役割があります。
もっとわかりやすく、イメージしてもらうために、ここで一つ個人的にわかりやすかった例え話を。
皆さん、小学校で使われている机をイメージしてみいてください。天盤の下に教科書とかが入れられるタイプのアレです。そして、そこで作業をしようとする自分を思い浮かべてください。
そうすると、
机の中・・・HDDなどの記憶媒体
机の上・・・メモリ
自分・・・CPU
という感じで対応ができます。
まずあなたが作業しようとした時、机の中にある道具やら何やらをそのまま机の中で作業するのは難しいかと思います。なので、机の上に色々出して作業するかと思います。これと同じ様なことがPCでも起こっております。この時、作業するために机の上に出したあれこれを、作業が終わった後に机の中に戻すはずなのですが、「また後でつかうかも?」と思うと、一旦そのままにしてしまうことがあるかと思います。そしてそれを多用すると、机の上にあれこれが沢山残っている状態ができてしまうのです。この状態が所謂「キャッシュが溜まっている」ってやつです。
よくこのキャッシュが有ると「重くなる」と思っている人が多いかと思いますが、それは思い違いであることが多いです。考えてみてください、机の上にあるモノを参照するのと、机の中にあるモノを参照するの、どちらが早いか。明らかに机の上にあるモノを参照した方が速いことがわかると思います。
ではなぜキャッシュが多くなると「重くなる」とおもわれるのでしょうか?それは机の上のモノがたくさんある状態で、机の中のモノを出さないといけない場合を考えてみてください。その場合、机の上にある当分使いそうに無い、又は使っていなかったモノを一旦捨てるか机の中に戻す作業を挟まなければなりません。この動作が頻繁に起こると「重くなる」という現象が起こります。
ここからが本題
溜まったキャッシュは基本的に自動的で管理されるのですが、それを強制的に消去する方法をいくつか紹介します。が、強制的にキャッシュを消去すると、キャッシュを参照して動作しているアプリが誤作動する可能性があり、最悪データが破損しかねません。なので、危険性の少ない方から順に紹介していきます。というかぶっちゃけ再起動するのがいいんだけど、それができない環境での措置ってことで。
当方の環境はこんな感じ。
OS: Cent OS 7
方法其ノ壱
$ sync
スタンダードな、よくある方法。
方法其ノ弐
$ echo 1 > /proc/sys/vm/drop_caches
キャッシュの中でも、消しても大丈夫そうなのを消去。
方法其ノ参(非推奨)
$ echo 3 > /proc/sys/vm/drop_caches
取り敢えず全部のキャッシュを消去。
方法其ノ肆(めっちゃ非推奨)
$ du -s /;\
sync && sync && sync;\
echo 3 > /proc/sys/vm/drop_caches
duコマンドでキャッシュを整理。
syncコマンドで少し解放。三回やってるのは念の為。
drop_cachesで全てのキャッシュを解放。
最後に
実行は自己責任にてお願いします。
取り敢えず、書いてみた感がすごいけど、メモリの解放はあまりオススメはできませんので悪しからず。