20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

ページキャッシュがどんどん増えている…そんな時に役立つワンライナー

サーバーのメモリのグラフを見ているとどうもページキャッシュがどんどん増えているという状況があったとします

そんな時に例えば Nginx のログとか明確にページキャッシュに乗っていそうなログがあればいいのですが,心当たりがないのにどんどん増えているのは不穏なのでどのファイルがページキャッシュに乗っているのか調べたいです

そんな時に役立つのは cpan モジュールの Sys::PageCache です

これを cpanm でインストールすれば pagecache-check.plpagecache-clear.pl というコマンドをインストールされます

そしてファイル名を指定すればそのファイルがページキャッシュにどの程度乗っているか確認できたり,ページキャッシュから追い出せたりする超便利コマンドです

このコマンドは超便利なのですがファイルを指定しなければいけないのでシステム全体でどのファイルのページキャッシュが多く乗っているのかは一つ一つ調べないといけません

そこでシステム全体でページキャッシュに多く乗っているファイルを見つけるワンライナーを書きました

find / -type f -name "*" -size +1000k -mmin -60 2> /dev/null \
  | xargs sudo pagecache-check.pl 2> /dev/null \
  | perl -ne 'if ((m{(.*?)\s.*cached/total_pages=(.*)/.*}) && ($2 > 0)) { print $2, "\t", $1, "\n"; }' \
  | sort -nr

とりあえず find で軽くファイルを絞っておきます
権限的に開けないファイルがあるのでその時にエラーが出てしまって邪魔なので標準エラー出力を捨てています
1000kB 以上で 60 分以内に更新があるファイルにしぼります

find の出力を xargs を使って pagecache-check.pl に渡します
ここでもエラーが出ることがあって邪魔だったので標準エラー出力を捨てました

その後 pagecache-check.pl の出力はコマンドの組み合わせでパースするのが困難だったのでまた perl のお世話になりました
そして sort コマンドに渡しやすい形に出力します

そして最後に sort -nr で軽くフィニッシュです

数が多ければ head とかで絞りましょう

ちなみに今回はとあるログファイルのログローテートがコケていてすごくでかくなっていることが原因でした
このワンライナーを使えば一発で気付けたので皆さんも何かおかしいと思ったらぜひ使ってください

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
20
Help us understand the problem. What are the problem?