2007年12月17日
GooglePerfToolsの使い方
- google-perftools - Fast, multi-threaded malloc() and nifty performance analysis tools
- 肥え続けるTomcatと胃を痛めるトラブルハッカー
- ローテクなメモリ使用量監視方法
PFIでは毎週1人適当な話題で発表しているのですが、この間「GooglePerfToolsの使い方」という軽いお題で発表した資料を公開してみます。特にC++で長期運用中のメモリリークに苦しんでおられる方は必見。基本的にドキュメントの日本語訳ですがね!SlideShareだとなぜか図がずれる。元ファイルはこちら。
google perf toolsのheap profiler機能は秀逸で、ある時点とある時点を比較して、どの関数がどのぐらいmallocしてメモリ使用量を増加させたかというのが一瞬で分かります。またそれを可視化する事もできます。さらにランタイムオーバーヘッドも少ない(間隔を指定できる)ので、運用しながらログを取ることも許容の範囲内だと思います。
性能に関してもSTLを使用しているアプリケーションに関しては細かいアロケーションが鬼のように発生するので、glibc mallocを使用したmultithreadアプリケーションの場合、malloc内部のロックがボトルネックになる場合があります。これはSolarisのplockstate(dtraceのwrapperコマンド)等により実際に確認することが出来ます。tcmallocはその辺りを解決しているので、Makefile.amに-ltcmallocを付け加えるだけで簡単にアプリケーションのスループットが向上しました。
また、glibc標準のアロケーターだとメモリフラグメンテーションで予想以上のメモリを食ってしまう事が有るようです。某検索エンジンでも稀にその状況が発生する事が有って、アプリケーション側のバグだと思い3ヶ月間ずっとコードとにらめっこしていたのですが、結局アロケーターが悪いという結論に陥りました。もっと早くGooglePerfToolsを知っていたら胃に穴が開くことも無かったでしょう。
という訳でみんなGooglePerfTools使うといいよ!
Google => アロケーター作ってる会社
中の人ありがとう!
- by
- at 22:59


comments