23
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-08-20

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

そんな時に例えば 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 とかで絞りましょう

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

23
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?