Kouhei Sutou
kou****@clear*****
2011年 12月 6日 (火) 17:18:48 JST
須藤です。 In <3c9c4ebf-c122-3f8c-9b05-9445803cf472 @ api101> "[groonga-dev,00641] rroonga利用の検索でメモリ使用量が増加していく" on Tue, 06 Dec 2011 16:50:13 +0900, hirano_verf****@mail***** wrote: > DBをcloseするとメモリは解放されると思っていたのですが、解放されないのでしょうか。 多くのリソースは解放されるのですが、一部のリソースは Groonga::Contextが持っているため、そちらもcloseしないといけ ないです。 例えば、以下のような感じです。 > Groonga::Context.default_options = {:encoding => :utf8} > 10.times{|select_try| > db_list.each do |db_name| > grdb = Groonga::Database.open(db_dir + db_name) ... > grdb.close Groonga::Context.default.close Groonga::Context.default = nil > puts "--- #{db_name} grdb.close ---" > sleep(5) > end > } > また、メモリ使用量を抑える方法がありましたら教えていただけないでしょうか。 こまめにGC.startをすると抑えられるかもしれませんが、その分、 実行速度も落ちそうです。。。 > 500.times {|n| > records = Groonga["sample"].select do |record| > record["_key"] == n.to_s > end > } ここで検索結果を格納するための一時テーブルを作成しているので すが、この一時テーブル用のメモリ領域が解放されていない可能性 があります。今回の場合だとループ毎にGC.startを行うと解放され そうな気がします。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/