hirano_verf****@mail*****
hirano_verf****@mail*****
2011年 12月 6日 (火) 19:11:28 JST
須藤様 平野です。 教えていただいた方法で安定しました! Groonga::Context についてはほとんど意識していなかったので全く気づきませんでした・・・。 GCについても実行時間、効果を見つつ入れていきたいと思います。 迅速なご回答ありがとうございました! 2011/12/06 (Tue) 17:18, "Kouhei Sutou" <kou****@clear*****> wrote: > 須藤です。 > > 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/ > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev >