重い処理を見つけたい時のメモ。
監視サービス利用
パフォーマンス監視サービス
New Relic
https://newrelic.com/
遅いレンダリング箇所などが分かりやすいです
logファイルから
※前置き
念ためlogファイル分割
行数調べる
$ wc -l development.log
行数から分割したいサイズの行で指定
$ split -l 10000 development.log develop_20XX-XX-XX_
すると
develop_20XX-XX-XX_aa
develop_20XX-XX-XX_ab …
と ファイル名がアルファベット名を順に分けて分割される
念ため半角スペース統一
$ sed 's/[[:blank:]][[:blank:]]*/ /g' develop_20XX-XX-XX_aa > develop_20XX-XX-XX_aa_sed
念ためsortしたいruntime:位置がずれないように区切り文字(sort -t '%'ができるよう)に置換える
$ sed 's/runtime: /%/g' devlog_20XX-XX-XX_aa_sed > devlog_20XX-XX-XX_aa_sed_runtime
mongo DB runtime 長い順に
$ grep "MOPED:" develop_20XX-XX-XX_aa_sed | sort -bnr -k 13 | head -15
Render 遅い順に
grep "Rendered" devlog_20XX-XX-XX_aa_sed | sort -b -t '(' -k 2nr,2 | head -15
※参考
Railsのproductionログから処理に時間がかかっている部分を探す - 元RX-7乗りの適当な日々
http://d.hatena.ne.jp/rx7/20080930/p2
※sort オプションの詳しい参考
CodeZine(コードジン)
http://codezine.jp/unixdic/w/sort
ShellScript - sortコマンド、基本と応用とワナ - Qiita
http://qiita.com/richmikan@github/items/cc4494359b1ac2f72311
※sed
Linuxコマンド集 - 【 sed 】 文字列の置換、行の削除を行う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/
細かい処理時間を rails console で計測
Benchmark.realtime do
# 処理
end
その時によって違うので、複数回試して、平均をみる
※参考
Rails - Rubyで処理の時間計測方法 - Qiita
http://qiita.com/yakiimo23/items/7293c7606c1d59501d89