https://bz.apache.org/bugzilla/show_bug.cgi?id=61212

            Bug ID: 61212
           Summary: Slow application boot time due to constant jar file
                    content read
           Product: Tomcat 8
           Version: 8.5.15
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: abruzgu...@eisgroup.com
  Target Milestone: ----

Created attachment 35071
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=35071&action=edit
Profile Before

We do have relativelly big spring based application with ~250mb of jars.

After migrating from tc 7 to tc 8 application boot time significantly
increased. Seems that most of the time is taken by a constant call to
java.util.jar.JarFile.getJarEntry. 

Looks like tc8 class/resource loaded on each ClassLoader.loadClass(String)
iterates throught all jars and asked each jar if resource exists instead of
caching jar content once in memmory.

tc 8 has the ability to read jar contens only once but to enable it we had to
extend org.apache.catalina.webresources.StandardRoot iwth custom
implementation.

After change total time spent on
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(String) dropped from
87sec to 39sec. It was 40+sec of time wasted on constant jar content check.

package org.apache.catalina.webresources;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceSet;

/**
 * Created by adi on 09/06/2017.
 */
public class CustomStandardRoot extends
org.apache.catalina.webresources.StandardRoot {

    @Override
    protected void startInternal() throws LifecycleException {
        super.startInternal();
        for (WebResourceSet webResourceSet : getClassResources()) {
            if (webResourceSet instanceof AbstractArchiveResourceSet) {
                // Load Jar Content into Memory
               
((AbstractArchiveResourceSet)webResourceSet).getArchiveEntries(false);
            }
        }
    }
}

and register custom implementation in TOMCAT_HOME/conf/context.xml 
<?xml version="1.0" encoding="UTF-8"?>
Context containerSciFilter="org.apache.tomcat.websocket.server.WsSci">
...
        <Resources cachingAllowed="true"
className="org.apache.catalina.webresources.CustomStandardRoot"/>      
...
</Context>

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to