Are you using RAMDirectory?

I am actually also dealing with a memory leak. My case is only particular to
RAMDirectory.

http://markmail.org/message/dfgcnnjglne3wynp
However, this RAMDirectory case is not as simple as setting searcher=null,
because I found some reference to RAMDirectory is held by some ThreadLocal
variables.(but I need to reuse thread also).

Here is the reference tree:
org.apache.lucene.store.RAMDirectory
  |- directory of org.apache.lucene.store.RAMFile
      |- file of org.apache.lucene.store.RAMInputStream
          |- base of org.apache.lucene.index.CompoundFileReader$CSIndexInput
              |- input of org.apache.lucene.index.SegmentTermEnum
                  |- value of java.lang.ThreadLocal$ThreadLocalMap$Entry


I am trying to track it down now. If anyone knows about it, please let me
know.

-- 
Chris Lu
-------------------------
Instant Scalable Full-Text Search On Any Database/Application
site: http://www.dbsight.net
demo: http://search.dbsight.com
Lucene Database Search in 3 minutes:
http://wiki.dbsight.com/index.php?title=Create_Lucene_Database_Search_in_3_minutes
DBSight customer, a shopping comparison site, (anonymous per request) got
2.6 Million Euro funding!


On Fri, Sep 5, 2008 at 8:43 AM, Andy33 <[EMAIL PROTECTED]> wrote:

>
> If I don't keep the IndexSearcher as a Singleton and instead open and close
> a
> new one each time, I have a large memory leak (probably due to the large
> queries I am doing). After watching the memory a while, I still believe I
> have a small memory leak even when the Directory, Analyzer, and
> IndexSearcher are Singletons. My free memory slowly becomes smaller after
> each query. Any ideas on what that may be due to?
>
> Here's my updated code...
>
> private synchronized Hits doQuery(String field, String queryStr, Sort
> sortOrder, String indexDirectory) throws Exception
>    {
>        Directory directory = null;
>         Query query = null;
>        QueryParser parser = null;
>
>        try
>        {
>            directory = DirectorySingleton.getInstance(indexDirectory);
>            ivIndexSearcher = (IndexSearcher)
> SearcherSingleton.getInstance(directory);
>
>            //search the index
>            parser = new QueryParser(field,
> AnalyzerSingleton.getInstance());
>            query = parser.parse(queryStr);
>
>            return ivIndexSearcher.search(query, sortOrder);
>         }
>        finally
>        {
>            if(null != directory)
>            {
>                directory.close();
>            }
>
>            directory = null;
>             parser = null;
>            query = null;
>        }
>    }
>
>
> --------------
> Example Singleton
>
> public class SearcherSingleton
> {
>    private static volatile HashMap<Directory, Searcher> cvSearches = new
> HashMap<Directory, Searcher>();
>
>
>    protected SearcherSingleton()
>    {
>
>    }
>
>
>    public static Searcher getInstance(Directory directory) throws
> IOException
>    {
>        if(!cvSearches.containsKey(directory))
>        {
>            synchronized(SearcherSingleton.class)
>            {
>                if(!cvSearches.containsKey(directory))
>                {
>                    cvSearches.put(directory, new IndexSearcher(directory));
>                }
>            }
>        }
>
>        return cvSearches.get(directory);
>     }
>
> }
>
>
>
> 장용석 wrote:
> >
> > In fact, I think that the important reasons are Directory class and
> > Analyzer
> > class.
> > If you don't want IndexSearcher class keep open for the entire life of a
> > web
> > application, you can do it.
> > I think It will not cause memory leak problem.
> > But, Directory and Analyzer classes can cause the problem if they new
> > created by method call every time. I think...
> > Only keep two classes Directory and Analyzer by singlton and do test. :)
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Lucene-Memory-Leak-tp19276999p19333985.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to