[ https://issues.apache.org/jira/browse/SLING-7969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16635308#comment-16635308 ]
Valentin Olteanu commented on SLING-7969: ----------------------------------------- I've checked again on a fresh instance and the Json Factory has a buffer of exactly 21103224 bytes. This happens both with and without the patch. Probably, over time, the buffer get doubled in size and doesn't shrink back. Looking over on the internet, I've stumbled upon [this discussion|http://tomee-openejb.979440.n4.nabble.com/JsonParserFactoryImpl-holds-20mb-heap-memory-when-used-as-jaxrs-client-in-tomee-td4678031.html], where johnzon maintainers state that is by design. So I'm not sure how much can be done in this case. > 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)