You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Adrien Grand (JIRA)" <ji...@apache.org> on 2017/01/23 13:37:26 UTC

[jira] [Commented] (LUCENE-7652) LRUQueryCache / IndexSearcher.DEFAULT_QUERY_CACHE memory leak

    [ https://issues.apache.org/jira/browse/LUCENE-7652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15834494#comment-15834494 ] 

Adrien Grand commented on LUCENE-7652:
--------------------------------------

Can you also read what the value of {{LRUQueryCache.ramBytesUsed}} is?

LRUQueryCache has references to current open {{IndexReader}}s due to close listeners. I believe you are analysing a heap dump and recursively adding everything that is referenced by your {{LRUQueryCache}} while it does not make sense ot take open {{IndexReader}}s into account.

bq. The keys of LRUQueryCache.cache are instances of SegmentCoreReaders, and I've checked many of the keys, the only reference to them is LRUQueryCache.cache, given LRUQueryCache.cache is an IdentityHashMap, that means you can't even get to them outside of the cache because you can't get a key that's equivalent to one of these in the cache.

This indicates that you are leaking index readers. When there are no readers that reference a segment anymore, that segment is closed, which triggers the eviction of all associated entries in the query cache. You should review your usage of Lucene to make sure that there is a call to close() for every index reader that you acquire.

> LRUQueryCache / IndexSearcher.DEFAULT_QUERY_CACHE memory leak
> -------------------------------------------------------------
>
>                 Key: LUCENE-7652
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7652
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/search
>    Affects Versions: 5.4, 5.5
>            Reporter: Lae
>            Priority: Critical
>
> Our {{IndexSearcher.DEFAULT_QUERY_CACHE}} is set to use 32MB of heap (the default), however upon inspection of our application's heap, it's retaining ~280MB of memory and increasing slowly.
> {{LRUQueryCache.cache.size}} was at 12,099, and {{LRUQueryCache.cache.modCount}} was also 12,099, meaning nothing was removed from {{LRUQueryCache.cache}} at all.
> The keys of {{LRUQueryCache.cache}} are instances of {{SegmentCoreReaders}}, and I've checked many of the keys, the only reference to them is {{LRUQueryCache.cache}}, given {{LRUQueryCache.cache}} is an {{IdentityHashMap}}, that means you can't even get to them outside of the cache because you can't get a key that's equivalent to one of these in the cache.
> This affectively makes {{IndexSearcher.DEFAULT_QUERY_CACHE}} a memory black hole.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org