Mantis - Resin
Viewing Issue Advanced Details
1428 major always 10-30-06 06:49 11-01-06 11:14
mabbott  
ferg  
normal  
closed 3.0.19  
fixed  
none    
none 3.1.0  
0001428: Locking in Jar.create() method blocks application performance
Our application makes heavy use of JavaMail and most requests must
at some point get a JavaMail Session instance. We have found very
heavy lock contention (2/3 of all threads) caused by the Resin
class loader resource fetch locking in the Jar.create method.
A stack dump is below. This is the limiting factor in the
application performance.


"resin-tcp-connection-*:80-3939" daemon prio=10 tid=0x00bd3fb8 nid=0x24f13 waiting for monitor entry [0xc60fe000..0xc60ffc70]
    at com.caucho.vfs.Jar.create(Jar.java:124)
    - waiting to lock <0xd78e6ca8> (a com.caucho.util.LruCache)
    at com.caucho.vfs.JarPath.getJar(JarPath.java:196)
    at com.caucho.vfs.JarPath.canRead(JarPath.java:157)
    at com.caucho.loader.TreeLoader.getPath(TreeLoader.java:312)
    at com.caucho.loader.Loader.getResourceAsStream(Loader.java:164)
    at com.caucho.loader.DynamicClassLoader.getResourceAsStream(DynamicClassLoader.java:1397)
    at com.caucho.loader.DynamicClassLoader.getParentResourceAsStream(DynamicClassLoader.java:1419)
    at com.caucho.loader.DynamicClassLoader.getResourceAsStream(DynamicClassLoader.java:1386)
    at com.caucho.loader.DynamicClassLoader.getParentResourceAsStream(DynamicClassLoader.java:1419)
    at com.caucho.loader.DynamicClassLoader.getResourceAsStream(DynamicClassLoader.java:1386)
    at java.lang.Class.getResourceAsStream(Class.java:1998)
    at javax.mail.SecuritySupport12$2.run(SecuritySupport12.java:41)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.mail.SecuritySupport12.getResourceAsStream(SecuritySupport12.java:39)
    at javax.mail.Session.loadResource(Session.java:1033)
    at javax.mail.Session.loadProviders(Session.java:871)
    at javax.mail.Session.<init>(Session.java:191)
    at javax.mail.Session.getInstance(Session.java:230)

Notes
(0001570)
ferg   
11-01-06 11:14   
Shifted synchronization to use putIfNew to remove lock dependency on the removeEvent