You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2014/05/15 18:38:31 UTC
[Bug 56530] New: WebappClassLoader.loadClass synchronization issue
due to coarse lock at WebappClassLoader instance level instead of been by
class name
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
Bug ID: 56530
Summary: WebappClassLoader.loadClass synchronization issue due
to coarse lock at WebappClassLoader instance level
instead of been by class name
Product: Tomcat 7
Version: 7.0.53
Hardware: PC
Status: NEW
Severity: major
Priority: P2
Component: Catalina
Assignee: dev@tomcat.apache.org
Reporter: SebTardif@ncf.ca
I'm having some visible performance issue related to the use of method
synchronized loadClass(String name, boolean resolve) in WebappClassLoader
I see that the author or at least some of the author(s) of the class
WebappClassLoader got the idea in other cases of a more specialize lock than
WebappClassLoader instance.
Should we just lock here using the name of the class we are looking for?
Also we should probably make the distinction between read and write.
The scenario here, is classic cache factory synchronization. So we could just
copy the right locking pattern from other sources.
My partial threads stack dump:
2014-05-14 12:36:01
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.45-b01 mixed mode):
"http-bio-31680-exec-57" - Thread t@124
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
...
"http-bio-31680-exec-56" - Thread t@123
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-55" - Thread t@122
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
Locked ownable synchronizers:
- locked <444b3957> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
"http-bio-31680-exec-54" - Thread t@121
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
"http-bio-31680-exec-53" - Thread t@120
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-52" - Thread t@119
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-51" - Thread t@118
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
"http-bio-31680-exec-50" - Thread t@117
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-49" - Thread t@116
java.lang.Thread.State: RUNNABLE
at java.lang.Class.getClassLoader0(Native Method)
at java.lang.Class.getClassLoader(Class.java:589)
at
com.sun.xml.internal.bind.v2.model.annotation.LocatableAnnotation.create(LocatableAnnotation.java:63)
at
com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:60)
at
com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:42)
"http-bio-31680-exec-48" - Thread t@115
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
"http-bio-31680-exec-47" - Thread t@114
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
"http-bio-31680-exec-46" - Thread t@113
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-45" - Thread t@112
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
"http-bio-31680-exec-44" - Thread t@111
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
"http-bio-31680-exec-43" - Thread t@110
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
"http-bio-31680-exec-42" - Thread t@109
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <2aa68578> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86)
at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32)
at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
"http-bio-31680-exec-40" - Thread t@107
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <2aa68578> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86)
at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32)
at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
"http-bio-31680-exec-39" - Thread t@106
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
"http-bio-31680-exec-38" - Thread t@105
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:241)
"http-bio-31680-exec-37" - Thread t@104
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
at
com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.loadObjectFactory(ModelBuilder.java:249)
"http-bio-31680-exec-36" - Thread t@103
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:289)
"http-bio-31680-exec-35" - Thread t@102
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-34" - Thread t@101
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-33" - Thread t@100
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-32" - Thread t@99
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
"http-bio-31680-exec-31" - Thread t@98
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
"http-bio-31680-exec-30" - Thread t@97
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185)
"http-bio-31680-exec-29" - Thread t@96
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
"http-bio-31680-exec-28" - Thread t@95
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
"http-bio-31680-exec-27" - Thread t@94
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
"http-bio-31680-exec-26" - Thread t@93
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
"http-bio-31680-exec-25" - Thread t@92
java.lang.Thread.State: BLOCKED
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
- waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41"
t@108
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
.. and more
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #11 from Stepan <st...@gmail.com> ---
The problem occurred in eclipse and context.xml was not loaded properly.
Right now everything works good.
Thanks for the help.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
Mario Lukica <ml...@gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |mlukica@gmail.com
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #2 from Sebastien Tardif <Se...@ncf.ca> ---
The same issues happen to others ->
https://groups.google.com/forum/#!topic/optiq-dev/amCEv1psDrI
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #3 from Mark Thomas <ma...@apache.org> ---
The partial stack trace is largely useless since it does not show what the
critical thread (http-bio-31680-exec-41) is doing.
When considering any proposed changes, keep this in mind:
http://svn.apache.org/viewvc?view=revision&revision=927565
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #9 from Stepan <st...@gmail.com> ---
Still not sure the problem is solved.
The problem tested in apache-tomcat-8.0.18 with ParallelWebappClassLoader
loader.
And apache-tomcat-7.0.35 has much better performance.
Do you have unit tests to check where is a bottleneck? or there is better idea
how to fix the problem with slow classloading?
JConsole shows that org.apache.catalina.loader.WebappClassLoaderBase.loadClass
is too slow in apache-tomcat-8.0.18:
Name: http-nio-8080-exec-20
State: BLOCKED on org.apache.catalina.loader.WebappClassLoader@39d950df owned
by: http-nio-8080-exec-80
Total blocked: 2 402 Total waited: 20
Stack trace:
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1190)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
javax.el.ImportHandler.findClass(ImportHandler.java:196)
javax.el.ImportHandler.resolveClass(ImportHandler.java:169)
javax.servlet.jsp.el.ScopedAttributeELResolver.getValue(ScopedAttributeELResolver.java:62)
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:80)
org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:46)
org.apache.el.parser.AstNot.getValue(AstNot.java:43)
org.apache.el.parser.AstAnd.getValue(AstAnd.java:37)
org.apache.el.parser.AstOr.getValue(AstOr.java:42)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:936)
org.apache.jsp.jsp.modules.category.breadCrumbs_jsp._jspx_meth_c_005fif_005f2(breadCrumbs_jsp.java:848)
org.apache.jsp.jsp.modules.category.breadCrumbs_jsp._jspx_meth_v_005flist_005f0(breadCrumbs_jsp.java:817)
org.apache.jsp.jsp.modules.category.breadCrumbs_jsp._jspService(breadCrumbs_jsp.java:221)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #4 from Sebastien Tardif <Se...@ncf.ca> ---
Thanks for the link. It does mentions for an attempt to provide parallel
classloading for Tomcat 7 but that doesn't seem to have happened.
http-bio-31680-exec-41 is running loading a class. Any of the stack below will
come to that state at some point. So you can pick anyone as a representative of
http-bio-31680-exec-41. My application does work, it's just 15x slower than
with GlassFish.
The thread dump was provided to show that we do have different code doing class
lookup, about different classes, all waiting. The code triggering loading is
not custom but JDK JAXB.
My understanding is that the problem is well understood, so a use case is not
adding anything here. Everybody know it's creating problems, that doesn't look
good, but it have been declared too hard to fix, and so progress stopped 4
years ago.
Previous deadlock issues may have been related to Java JDK version before 7 ->
http://docs.oracle.com/javase/7/docs/technotes/guides/lang/cl-mt.html
Optimized class loader ->
https://github.com/jboss-modules/jboss-modules/blob/master/src/main/java/org/jboss/modules/ConcurrentClassLoader.java
Java 7 was release July 28, 2011.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #8 from Konstantin Kolinko <kn...@gmail.com> ---
Just some documentation notes. As a reference about this new feature.
1. This feature is off by default.
2. To enable it, add the following XML element
either to the context file of your web application,
or to the global conf/context.xml (to enable this for all webapps by default):
<Loader loaderClass="org.apache.catalina.loader.ParallelWebappClassLoader"
/>
It works for me with JDK 7u67.
Once 8.0.13 (or later) is officially released, the documentation will be at
http://tomcat.apache.org/tomcat-8.0-doc/config/loader.html
3. MBeans for the new class are visible in jconsole application, under
Catalina/ParallelWebappClassloader. An ObjectName looks like
Catalina:type=ParallelWebappClassLoader,host=localhost,context=/examples
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
Mark Thomas <ma...@apache.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |FIXED
--- Comment #7 from Mark Thomas <ma...@apache.org> ---
I've done some refactoring of WebappClassLoader and there is now also a
ParallelWebappClassLoader that uses a lock based on the class name. This will
be included in 8.0.13 onward.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
Sebastien Tardif <Se...@ncf.ca> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |SebTardif@ncf.ca
OS| |All
--- Comment #1 from Sebastien Tardif <Se...@ncf.ca> ---
The same exact application didn't have the issue with GlassFish 3.x latest.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #5 from Sebastien Tardif <Se...@ncf.ca> ---
The implementation of GlassFish "working" on JDK 6, is avoiding "systematic"
synchronization on the instance, and so that seems to have been enough to be
fast, see
http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.web/war-util/3.0/org/glassfish/web/loader/WebappClassLoader.java
In other words, they have at least tried to synchronized the smaller block as
possible in all cases, and also with dubious construct, used some optimization
similar to read/write lock.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
--- Comment #10 from Mark Thomas <ma...@apache.org> ---
The stack trace shows you aren't using parallel class loading. The lock is on
the ClassLoader rather than a class specific object.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 56530] WebappClassLoader.loadClass synchronization issue due to
coarse lock at WebappClassLoader instance level instead of been by class name
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=56530
Mark Thomas <ma...@apache.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|Catalina |Catalina
Version|7.0.53 |trunk
Product|Tomcat 7 |Tomcat 8
Target Milestone|--- |----
Severity|major |enhancement
--- Comment #6 from Mark Thomas <ma...@apache.org> ---
Again, please provide the full stack trace. It might tell us something it
doesn't tell you.
Tomcat 7 has to run on Java 6 and experience to date has been that
synchronizing on anything other than the method leads to problems for a small
number if users.
Tomcat 8 is where there is scope to revisit parallel loading.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org