<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Hi Balz<br>
    <br>
    If I understand correctly this happens at<br>
    <br>
    src/core/java/org/wyona/yanel/core/util/ConfigurationUtil.java<br>
    <br>
    or more particular in the DocumentBuilderFactory of xerces:<br>
    <br>
                Document doc = null;<br>
                DocumentBuilderFactory dbf =
    javax.xml.parsers.DocumentBuilderFactory.newInstance();<br>
                dbf.setNamespaceAware(true);<br>
                javax.xml.parsers.DocumentBuilder parser =
    dbf.newDocumentBuilder();<br>
    <br>
    I am not sure what this code is doing exactly. Maybe upgrading
    Xerces or replacing Xerces helps.<br>
    <br>
    Let me know in case you will have found a way it improve this.<br>
    <br>
    All the best<br>
    <br>
    Michael<br>
    <br>
    <div class="moz-cite-prefix">Am 29.04.20 um 09:38 schrieb basZero:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAOXzDSHfuhov0cD-QafY8h8ArpJar50_StULwjq85SS69+ENKA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Hi,
        <div><br>
        </div>
        <div>today I noticed the following bottleneck in Yanel's
          implementation:</div>
        <div><br>
        </div>
        <div>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.</div>
        <div><br>
        </div>
        <div>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).</div>
        <div><br>
        </div>
        <div>Here is the stack trace. Any idea, what exactly gets parsed
          here and why?</div>
        <div>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).</div>
        <div><br>
        </div>
        <div>
          <pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.9px;margin-top:0px;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-radius:3px;color:rgb(36,41,46);margin-bottom:0px"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.9px;padding:0px;margin:0px;background:initial;border-radius:3px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit">"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)</code></pre>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
    </blockquote>
    <br>
  </body>
</html>