[Yanel-dev] Unnecessary LOCKING at Resource instantiation
Michael Wechner
michael.wechner at wyona.com
Wed Apr 29 16:32:54 EDT 2020
Hi Balz
If I understand correctly this happens at
src/core/java/org/wyona/yanel/core/util/ConfigurationUtil.java
or more particular in the DocumentBuilderFactory of xerces:
Document doc = null;
DocumentBuilderFactory dbf =
javax.xml.parsers.DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder parser =
dbf.newDocumentBuilder();
I am not sure what this code is doing exactly. Maybe upgrading Xerces or
replacing Xerces helps.
Let me know in case you will have found a way it improve this.
All the best
Michael
Am 29.04.20 um 09:38 schrieb basZero:
> Hi,
>
> today I noticed the following bottleneck in Yanel's implementation:
>
> for each request, the resource gets instantiated. and for each
> request, the resource config XML gets parsed. During this parsing,
> obviously something requires a Java System Property to be read, and
> this access obviously gets synchronized, which is VERY bad for
> concurrency.
>
> We have about 90 requests per second at peak time, and this is now our
> next bottleneck (many others have been eliminated in the past).
>
> Here is the stack trace. Any idea, what exactly gets parsed here and why?
> I will optimize this code in my own Yanel branch and get rid of it
> (e.g. permanent caching of resource config would help a lot).
>
> |"http-bio-443-exec-6766" #10541 daemon prio=5 os_prio=0
> tid=0x00007f970d2bb800 nid=0x6ccf waiting for monitor entry
> [0x00007f9590c4c000] java.lang.Thread.State: BLOCKED (on object
> monitor) at java.util.Hashtable.get(Hashtable.java:362) - waiting to
> lock <0x00000001806b31b0> (a java.util.Properties) at
> java.util.Properties.getProperty(Properties.java:969) at
> java.lang.System.getProperty(System.java:720) at
> org.apache.xerces.parsers.SecuritySupport$4.run(Unknown Source) at
> java.security.AccessController.doPrivileged(Native Method) at
> org.apache.xerces.parsers.SecuritySupport.getSystemProperty(Unknown
> Source) at
> org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
> at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown
> Source) at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
> at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) at
> org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source) at
> org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown
> Source) at
> org.wyona.yanel.core.util.ConfigurationUtil.getCustomConfiguration(ConfigurationUtil.java:170)
> at
> org.wyona.yanel.core.ResourceConfiguration.load(ResourceConfiguration.java:194)
> at
> org.wyona.yanel.core.ResourceConfiguration.<init>(ResourceConfiguration.java:69)
> at
> org.wyona.yanel.core.ResourceTypeMatcherV1ImplV2.getResourceConfiguration(ResourceTypeMatcherV1ImplV2.java:66)
> at
> org.wyona.yanel.core.ResourceManager.getResource(ResourceManager.java:138)
> at
> org.wyona.yanel.servlet.YanelServlet.getResource(YanelServlet.java:1108)
> at
> org.wyona.yanel.servlet.YanelServlet.getContent(YanelServlet.java:608)
> at org.wyona.yanel.servlet.YanelServlet.doGet(YanelServlet.java:530)
> at org.wyona.yanel.servlet.YanelServlet.service(YanelServlet.java:414)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)|
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mx2.wyona.com/pipermail/yanel-development/attachments/20200429/6273dcc4/attachment.html>
More information about the Yanel-development
mailing list