rudolfv
rudolfv

Reputation: 817

Classloader contention on JAX-WS invocations in Weblogic

We are encountering many threads waiting behind the below thread which owns the ClassLoader lock as shown.

This is happening on Weblogic 10.3.6 running on IBM JDK 1.7.

I have considered swapping out the Weblogic JAX-WS implementation with a newer one, but would like some evidence that it will resolve the problem before embarking down that path.

I also see here Is this JAX-WS client call thread safe? that the proxy classes are not thread safe. What about using ThreadLocal instances of the proxy classes? Or a pool of proxy classes similiar to KryoPool?

https://github.com/EsotericSoftware/kryo/blob/master/src/com/esotericsoftware/kryo/pool/KryoPool.java

Monitor

Owns Monitor Lock on 
java/lang/ClassLoader$ClassNameBasedLock@0x00000007D0BB0B18 , java/util/jar/JarFile@0x000000070300BD08

Java Stack

at java/util/zip/ZipFile.getEntryByModifiedUTF8(Native Method) 
at java/util/zip/ZipFile.getEntry(ZipFile.java:343(Compiled Code)) 
at java/util/jar/JarFile.getEntry(JarFile.java:305(Compiled Code)) 
at java/util/jar/JarFile.getJarEntry(JarFile.java:288(Compiled Code)) 
at sun/misc/URLClassPath$JarLoader.getResource(URLClassPath.java:1093(Compiled Code)) 
at sun/misc/URLClassPath.getResource(URLClassPath.java:330(Compiled Code)) 
at java/net/URLClassLoader$ClassFinder.run(URLClassLoader.java:1162(Compiled Code)) 
at java/security/AccessController.doPrivileged(AccessController.java:488) 
at java/net/URLClassLoader.findClass(URLClassLoader.java:595(Compiled Code)) 
at java/lang/ClassLoader.loadClassHelper(ClassLoader.java:786(Compiled Code)) 
at java/lang/ClassLoader.loadClass(ClassLoader.java:760(Compiled Code)) 
at sun/misc/Launcher$AppClassLoader.loadClass(Launcher.java:326(Compiled Code)) 
at java/lang/ClassLoader.loadClassHelper(ClassLoader.java:778(Compiled Code)) 
at java/lang/ClassLoader.loadClass(ClassLoader.java:764(Compiled Code)) 
at java/lang/ClassLoader.loadClass(ClassLoader.java:741(Compiled Code)) 
at com/sun/proxy/$Proxy162191.getCustomerDetails(Bytecode PC:21) 
at sun/reflect/GeneratedMethodAccessor574.invoke(Bytecode PC:42(Compiled Code)) 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56(Compiled Code)) 
at java/lang/reflect/Method.invoke(Method.java:620(Compiled Code)) 
at weblogic/wsee/jaxws/spi/ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:84(Compiled Code)) 
at com/sun/proxy/$Proxy636.getCustomerDetails(Bytecode PC:18(Compiled Code)) 
at sun/reflect/GeneratedMethodAccessor574.invoke(Bytecode PC:42(Compiled Code)) 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56(Compiled Code)) 
at java/lang/reflect/Method.invoke(Method.java:620(Compiled Code)) 
at com/mycompany/util/webservice/PortFactory$PortCacheProxy.callMethodOnPort(PortFactory.java:317(Compiled Code)) 
at com/mycompany/util/webservice/PortFactory$PortCacheProxy.invoke(PortFactory.java:290(Compiled Code)) 
at com/sun/proxy/$Proxy637.getCustomerDetails(Bytecode PC:18(Compiled Code)) 
at com/mycompany/wsclient/customer/viewcustomerdetails/GetCustomerDetailsBaseOperation.call(GetCustomerDetailsBaseOperation.java:52(Compiled Code)) 
at com/mycompany/wsclient/customer/viewcustomerdetails/GetCustomerDetailsBaseOperation.call(GetCustomerDetailsBaseOperation.java:19(Compiled Code)) 
at com/mycompany/util/webservice/WebServiceOperation.call(WebServiceOperation.java:261(Compiled Code)) 
at com/mycompany/util/webservice/WebServiceOperationWork.run(WebServiceOperationWork.java:27(Compiled Code)) 
at weblogic/work/j2ee/J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:184(Compiled Code)) 
at weblogic/work/ExecuteThread.execute(ExecuteThread.java:263(Compiled Code)) 
at weblogic/work/ExecuteThread.run(ExecuteThread.java:221(Compiled Code))

Upvotes: 0

Views: 518

Answers (0)

Related Questions