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

ASF GitHub Bot commented on SOLR-10506:
---------------------------------------

GitHub user tboeghk opened a pull request:

    https://github.com/apache/lucene-solr/pull/197

    [SOLR-10506] Fixes a memory leak in zk schema watching

    Upon manual Solr Collection reloading, references to the closed SolrCore 
are not fully removed by the garbage collector as a strong reference to the 
ZkIndexSchemaReader is held in a ZooKeeper Watcher that watches for schema 
changes.
    
    In our case, this leads to a massive memory leak as managed resources are 
still referenced by the closed SolrCore. Our Solr cloud environment utilizes 
rather large managed resources (synonyms, stopwords). To reproduce, we fired 
out environment up and reloaded the collection 13 times. As a result we fully 
exhausted our heap. A closer look with the Yourkit profiler revealed 13 
SolrCore instances, still holding strong references to the garbage collection 
root.
    
    Each SolrCore instance holds a single path with strong references to the gc 
root via a Watcher in ZkIndexSchemaReader. The ZkIndexSchemaReader registers a 
close hook in the SolrCore but the Zookeeper is not removed upon core close.
    
    We supplied this Github Pull Request that extracts the zookeeper Watcher as 
a static inner class. To eliminate the memory leak, the schema reader is held 
inside a WeakReference and the reference is explicitly removed on core close.
    
    Initially I wanted to supply a test case but unfortunately did not find a 
good starting point ...
    
    N.B.: I did this second PR for the same issue to separate code changes for 
both SOLR-10506 and SOLR-10550 which I maintained on the same fork branch :-/

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/shopping24/lucene-solr branch_6_5__SOLR-10506

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/lucene-solr/pull/197.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #197
    
----
commit aa3a96cd88d1724f3ab641f25c5373ff58f4616d
Author: Torsten Bøgh Köster <[email protected]>
Date:   2017-04-18T09:43:52Z

    Fixes a memory leak in zk schema watching

----


> Possible memory leak upon collection reload
> -------------------------------------------
>
>                 Key: SOLR-10506
>                 URL: https://issues.apache.org/jira/browse/SOLR-10506
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: Server
>    Affects Versions: 6.5
>            Reporter: Torsten Bøgh Köster
>         Attachments: solr_collection_reload_13_cores.png, 
> solr_gc_path_via_zk_WatchManager.png
>
>
> Upon manual Solr Collection reloading, references to the closed {{SolrCore}} 
> are not fully removed by the garbage collector as a strong reference to the 
> {{ZkIndexSchemaReader}} is held in a ZooKeeper {{Watcher}} that watches for 
> schema changes.
> In our case, this leads to a massive memory leak as managed resources are 
> still referenced by the closed {{SolrCore}}. Our Solr cloud environment 
> utilizes rather large managed resources (synonyms, stopwords). To reproduce, 
> we fired out environment up and reloaded the collection 13 times. As a result 
> we fully exhausted our heap. A closer look with the Yourkit profiler revealed 
> 13 {{SolrCore}} instances, still holding strong references to the garbage 
> collection root (see screenshot 1).
> Each {{SolrCore}} instance holds a single path with strong references to the 
> gc root via a `Watcher` in `ZkIndexSchemaReader` (see screenshot 2). The 
> {{ZkIndexSchemaReader}} registers a close hook in the {{SolrCore}} but the 
> Zookeeper is not removed upon core close.
> We supplied a Github Pull Request 
> (https://github.com/apache/lucene-solr/pull/190) that extracts the zookeeper 
> `Watcher` as a static inner class. To eliminate the memory leak, the schema 
> reader is held inside a `WeakReference` and the reference is explicitly 
> removed on core close.
> Initially I wanted to supply a test case but unfortunately did not find a 
> good starting point ...



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to