You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Timothee Maret (JIRA)" <ji...@apache.org> on 2019/01/23 12:34:00 UTC

[jira] [Commented] (SLING-7969) Memory leak in DiscoveryLiteDescriptor

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

Timothee Maret commented on SLING-7969:
---------------------------------------

Thanks [~volteanu]! Indeed, it seems the Johzon library is taking a bold approach to memory management. This may have changed with JOHNZON-125. I'll provide a patch to leverage and test it.

Other than that, maybe we can entirely avoid the JsonReaderFactory which seems to come from [that change|https://github.com/apache/sling-org-apache-sling-discovery-commons/commit/709c0c23ec5721f33d792082b737cd2809c7c9b0#diff-7f4a97d3aa096f752d678f3f90c374d3R45] supposedly to parse commented JSON. [~egli] do we expect commented JSON in the {{DiscoveryLiteDescriptor}} ?




> Memory leak in DiscoveryLiteDescriptor
> --------------------------------------
>
>                 Key: SLING-7969
>                 URL: https://issues.apache.org/jira/browse/SLING-7969
>             Project: Sling
>          Issue Type: Bug
>          Components: Discovery
>    Affects Versions: Discovery Commons 1.0.20
>            Reporter: Timothee Maret
>            Assignee: Timothee Maret
>            Priority: Major
>              Labels: discovery
>
> As identified in [~volteanu]'s adaptTo [presentation|https://adapt.to/2018/en/schedule/sling-memory-deep-dive.html], it seems that Sling Discovery on Oak is consuming 42MB of RAM on a standard instance.
> Sling discovery deals with transient states (the views, leases, etc.) and is not caching significant amount of data. The 42MB figure for the discovery feature seems like a symptom of a memory leak.
> [~volteanu] shared in his presentation that the 42MB worth of RAM was mainly consumed by a Json Factory reference. There is one static JsonReaderFactory in the discovery commons module, in the [DiscoveryLiteDescriptor|https://github.com/apache/sling-org-apache-sling-discovery-commons/blob/master/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/DiscoveryLiteDescriptor.java].
> Looking at the code, it seems that each invocation of the [getDescriptorFrom|https://github.com/apache/sling-org-apache-sling-discovery-commons/blob/master/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/DiscoveryLiteDescriptor.java#L51] method creates a JSON reader but never close it. This may may leave resources behind as hinted by the description of the [close|https://docs.oracle.com/javaee/7/api/javax/json/JsonReader.html#close--] method in the API. AFAIK, the [getDescriptorFrom|https://github.com/apache/sling-org-apache-sling-discovery-commons/blob/master/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/DiscoveryLiteDescriptor.java#L51] is invoked periodically on a relatively high frequency (< seconds) which may be the trigger for the leak on all instances.
> This is only a supposition for now, it should be investigated further, simply by running a patched version of \{{org.apache.sling.discovery.commons}} that make sure each JSON reader is properly closed.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)