I think the main problem here is that we keep creating a new TransformerFactory instance on each request which causes an expensive provider search. We can probably cache the TransformerFactory instance and reuse it on subsequent requests (or maybe even rewrite the code not to use the TransformerFactory API). Can you please open a bug on it?
Thanks, Jarek On Wed, Apr 29, 2009 at 8:55 PM, mdasari <mdas...@gmail.com> wrote: > > Hi, > > Geronimo: v 2.1.3 > OS: Windows XP, Windows Server 2003 > > I've a web-service that gets polled every N minutes, I noticed that when it > is servicing a request the CPU usage is hitting close to 80%. I expect to > have multiple clients to this web-service so it is going to be a problem. > > Based on what I deduced, the following stack trace is trying to load several > of JAR files and not able to load/find them. This is resulting in lot of > kernel level calls thus CPU utilization. > > ---------- STACK of the thread processing a WS request and trying to load > JARs ------------- > > "http-0.0.0.0-8080-1" daemon prio=6 tid=0x437c7c00 nid=0x1700 runnable > [0x432ce000..0x432cfa14] > java.lang.Thread.State: RUNNABLE > at java.io.WinNTFileSystem.checkAccess(Native Method) > at java.io.File.canRead(File.java:691) > at > org.apache.geronimo.kernel.classloader.UrlResourceFinder.getClassPath(UrlResourceFinder.java:151) > at > org.apache.geronimo.kernel.classloader.UrlResourceFinder.findResource(UrlResourceFinder.java:95) > - locked <0x05420118> (a java.lang.Object) > at > org.apache.geronimo.kernel.classloader.JarFileClassLoader$3.run(JarFileClassLoader.java:179) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.geronimo.kernel.classloader.JarFileClassLoader.findResource(JarFileClassLoader.java:177) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.getResource(MultiParentClassLoader.java:580) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.getResource(MultiParentClassLoader.java:565) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.getResource(MultiParentClassLoader.java:565) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.getResource(MultiParentClassLoader.java:565) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.getResource(MultiParentClassLoader.java:565) > at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1168) > at > org.apache.catalina.loader.WebappClassLoader.getResourceAsStream(WebappClassLoader.java:1170) > at javax.xml.transform.SecuritySupport$4.run(SecuritySupport.java:94) > at java.security.AccessController.doPrivileged(Native Method) > at > javax.xml.transform.SecuritySupport.getResourceAsStream(SecuritySupport.java:87) > at > javax.xml.transform.FactoryFinder.findJarServiceProvider(FactoryFinder.java:250) > at javax.xml.transform.FactoryFinder.find(FactoryFinder.java:223) > at > javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:102) > at > org.apache.geronimo.axis2.WSDLQueryHandler.writeTo(WSDLQueryHandler.java:246) > at > org.apache.geronimo.axis2.WSDLQueryHandler.writeTo(WSDLQueryHandler.java:240) > at > org.apache.geronimo.axis2.WSDLQueryHandler.writeResponse(WSDLQueryHandler.java:164) > at > org.apache.geronimo.axis2.Axis2WebServiceContainer.processGETRequest(Axis2WebServiceContainer.java:321) > at > org.apache.geronimo.axis2.Axis2WebServiceContainer.doService2(Axis2WebServiceContainer.java:268) > at > org.apache.geronimo.axis2.Axis2WebServiceContainer.doService(Axis2WebServiceContainer.java:205) > at > org.apache.geronimo.axis2.Axis2WebServiceContainer.getWsdl(Axis2WebServiceContainer.java:161) > at > org.apache.geronimo.tomcat.TomcatEJBWebServiceContext$EJBWebServiceValve.invoke(TomcatEJBWebServiceContext.java:159) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) > at java.lang.Thread.run(Thread.java:619) > --------------------- > > > > The following are files this java process is trying to read/load. (Output > from Windows process monitor). It seems to be doing in a loop as I see > continuous system calls to read these jar files repeatedly. > > -------------------- > > > 5:32:51.2222845 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\activation.jar > NAME NOT FOUND > 5:32:51.2225720 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jsr173_1.0_api.jar > NAME NOT FOUND > 5:32:51.2229192 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb1-impl.jar > NAME NOT FOUND > 5:32:51.2232875 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\messaging\saaj\saaj-impl\1.3\saaj-api.jar > NAME NOT FOUND > 5:32:51.2236048 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\messaging\saaj\saaj-impl\1.3\activation.jar > NAME NOT FOUND > 5:32:51.2240117 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb-api.jar > NAME NOT FOUND > 5:32:51.2242844 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\activation.jar > NAME NOT FOUND > 5:32:51.2245549 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jsr173_1.0_api.jar > NAME NOT FOUND > 5:32:51.2246938 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbyclient\10.4.1.3\derbyLocale_zh_TW.jar > NAME NOT FOUND > 5:32:51.2250253 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbynet\10.4.1.3\derby.jar > NAME NOT FOUND > 5:32:51.2252595 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbytools\10.4.1.3\derbyLocale_cs.jar > NAME NOT FOUND > 5:32:51.2254948 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbytools\10.4.1.3\derbyLocale_de_DE.jar > NAME NOT FOUND > 5:32:51.2257273 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbytools\10.4.1.3\derbyLocale_es.jar > NAME NOT FOUND > 5:32:51.2259593 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\org\apache\derby\derbytools\10.4.1.3\derbyLocale_fr.jar > NAME NOT FOUND > 5:32:51.2262344 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb1-impl.jar > NAME NOT FOUND > 5:32:51.2266488 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb-api.jar > NAME NOT FOUND > 5:32:51.2269216 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\activation.jar > NAME NOT FOUND > 5:32:51.2271920 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jsr173_1.0_api.jar > NAME NOT FOUND > 5:32:51.2274621 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb1-impl.jar > NAME NOT FOUND > 5:32:51.2279473 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb-api.jar > NAME NOT FOUND > 5:32:51.2282277 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\activation.jar > NAME NOT FOUND > 5:32:51.2284987 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jsr173_1.0_api.jar > NAME NOT FOUND > 5:32:51.2287691 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb1-impl.jar > NAME NOT FOUND > 5:32:51.2291697 PM java.exe 2880 QueryOpen > E:\geronimo-tomcat6-javaee5-2.1.3\repository\com\sun\xml\bind\jaxb-impl\2.0.5\jaxb-api.jar > NAME NOT FOUND > > ....... > -------------- > > > My questions are: > 1. I don't see those JARs in the location it is looking for, is there a way > to disable this lookup? Do I've to place those jar files in those locations? > 2. Where does class-loader get this list of JARs? Can I tweak anything > there? > 3. Did I configure something incorrectly? > > Geronimo/Webservice functionally still works, but I'd expect severe problems > when I use this service with multiple ws clients. > > Can anyone shed some light on this? > > best regards > - mdasari > -- > View this message in context: > http://www.nabble.com/Webservice-handling-consuming-considerable-CPU-%28Windows%29-tp23303330s134p23303330.html > Sent from the Apache Geronimo - Users mailing list archive at Nabble.com. > >