Timothee Maret created SLING-7969:
-------------------------------------
Summary: 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
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)