はじめに
MySQLで高速に全文検索するためのオープンソースのストレージエンジンとしてMroonga (むるんが)を公開しています。
最新のバージョンは2013年11月29日にリリースした3.10です。
今回は、Mroonga(もしくはGroonga)のメモリリークが疑わしいときに確認する方法を紹介します。
最近のメモリリークの話題
去年の4/29にリリースしたMroonga 2.02から1ヶ月ちょい前の10/29にリリースしたMroonga 3.09まで、全文検索をする(MATCH AGAINSTを使う)たびに336バイトずつメモリリークするバグがあるということが明かになりました。
これ実はメモリリークしてない?と思ったときに簡単に確認する方法があると良いですね、ということになるわけですが、実はすでに用意されています。
メモリリークを確認しよう
Mroongaの場合
Mroongaの場合、mroonga_command("status")を実行して、alloc_countの値を確認しましょう。
それが際限なく増えていくと Mroonga または Groonga に メモリーリークの疑いがあります。
SELECT mroonga_command("status");
mysql> SELECT mroonga_command('status');
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mroonga_command('status') |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"alloc_count":573,"starttime":1386574922,"uptime":8322,"version":"3.1.0","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.10 sec)
Groongaの場合
Groongaの場合はstatusコマンドを実行します。
GroongaのHTTPサーバ機能を使っているなら、http://サーバーIP:10041/d/statusにアクセスすることでも確認できます。
curl http://localhost:10041/d/status
次のような結果が得られます。同じようにalloc_countを確認しましょう。
[[0,1386583179.92117,0.110098361968994],{"alloc_count":149,"starttime":1386574937,"uptime":8243,"version":"3.1.0","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]
メモリリークを確認できたら?
メモリリークについてメーリングリスト groonga-dev@lists.sourceforge.jp まで報告してもらえると、不具合修正をしてMroonga (もしくはGroonga)を安心して使えるように改善していけるので嬉しいです。