[
https://issues.apache.org/jira/browse/OAK-11782?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Joerg Hoh updated OAK-11782:
----------------------------
Epic Link: OAK-11821
Description:
In AEM we often import large content packges via filevault. Tracking the
process I frequently see this stacktrace:
{noformat}
at java.util.HashMap.putMapEntries([email protected]/HashMap.java:508)
at java.util.HashMap.<init>([email protected]/HashMap.java:486)
at
org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
at
org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
- locked <0x000000058fdc1120> (a
org.apache.felix.framework.EventDispatcher)
at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
at
org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
- locked <0x00000007859b2bc0> (a
org.osgi.util.tracker.ServiceTracker$Tracked)
- locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
at
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
at
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
at
org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
at
org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
at
org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
at
org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement([email protected]/AbstractSAXParser.java:510)
{noformat}
In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor
service from the OSGI service registry. This is not per se a problem, but when
installing packages of 10k+ nodes this overhead can take a significant amount
of time (5-8% of the total duration); and according to my dumps the problem is
not the actual retrieval of the service, but rather the creation of the Service
Tracker.
To reduce this I suggest that we should make the Tracker a global object (a
static member of the UserImporter class, being populated on first access),
which will eliminate these frequent accesses to the OSGI Service Registry.
was:
In AEM we often import large content packges via filevault. Tracking the
process I frequently see this stacktrace:
{noformat}
at java.util.HashMap.putMapEntries([email protected]/HashMap.java:508)
at java.util.HashMap.<init>([email protected]/HashMap.java:486)
at
org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
at
org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
- locked <0x000000058fdc1120> (a
org.apache.felix.framework.EventDispatcher)
at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
at
org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
- locked <0x00000007859b2bc0> (a
org.osgi.util.tracker.ServiceTracker$Tracked)
- locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
at
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
at
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
at
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
at
org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
at
org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
at
org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
at
org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
at
org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement([email protected]/AbstractSAXParser.java:510)
{noformat}
In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor
service from the OSGI service registry. This is not per se a problem, but when
installing packages of 10k+ nodes this overhead can take a significant amount
of time (5-8% of the total duration); and according to my dumps the problem is
not the actual retrieval of the service, but rather the creation of the Service
Tracker.
To reduce this I suggest that we should make the Tracker a global object (a
static member of the UserImporter class, being populated on first access),
which will eliminate these frequent accesses to the OSGI Service Registry.
> UserImporter: use a global tracker for the UserMonitor.class
> ------------------------------------------------------------
>
> Key: OAK-11782
> URL: https://issues.apache.org/jira/browse/OAK-11782
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: jcr
> Affects Versions: 1.78.0
> Reporter: Joerg Hoh
> Priority: Major
>
> In AEM we often import large content packges via filevault. Tracking the
> process I frequently see this stacktrace:
> {noformat}
> at java.util.HashMap.putMapEntries([email protected]/HashMap.java:508)
> at java.util.HashMap.<init>([email protected]/HashMap.java:486)
> at
> org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
> at
> org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
> - locked <0x000000058fdc1120> (a
> org.apache.felix.framework.EventDispatcher)
> at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
> at
> org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
> - locked <0x00000007859b2bc0> (a
> org.osgi.util.tracker.ServiceTracker$Tracked)
> - locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
> at
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
> at
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
> at
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
> at
> org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
> at
> org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
> at
> org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
> at
> org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
> at
> org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
> at
> org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
> at
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
> at
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
> at
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
> at
> org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
> at
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement([email protected]/AbstractSAXParser.java:510)
> {noformat}
> In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor
> service from the OSGI service registry. This is not per se a problem, but
> when installing packages of 10k+ nodes this overhead can take a significant
> amount of time (5-8% of the total duration); and according to my dumps the
> problem is not the actual retrieval of the service, but rather the creation
> of the Service Tracker.
> To reduce this I suggest that we should make the Tracker a global object (a
> static member of the UserImporter class, being populated on first access),
> which will eliminate these frequent accesses to the OSGI Service Registry.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)