Jalview applet freezing - deadlock?

Hi guys,

I’ve just started integrating the Jalview applet into our multiple structural alignment pages (which was surprisingly easy and very nice - thanks). However, when testing it on various setups, we’ve noticed a problem where launching the applet consistently freezes the web browser for a particular machine.

We’ve done some detective work, but haven’t come up with anything immediately obvious - wondered if you could suggest anything. What we know:

  • Jalview applet works fine on a range of setups including: CentOS 5.2, Firefox 3.0.8, Java 1.6.0_02

  • Machine that doesn’t work is running: CentOS 5.2, Firefox 3.0.8, Java 1.6.0_10

  • Other applets work fine on that machine (e.g. we’ve got Jmol applet working fine off the same web page, but Jalview freezes)

On one occasion (after we enabled the Java console, although this might be a red herring) we managed to get the “unsigned content” prompt then the applet worked fine, however on all other times, we didn’t even get to the “unsigned content” prompt. My colleague ran this through HotSpot VM client which reported a “java level deadlock” - could this be a thread issue?

More details below - many thanks in advance,

Ian

···


Ian Sillitoe
CATH Team – http://cathdb.info

System info:

Centos 5.2 (?)
Java 1.6.0_10
Firefox 3.0.8

network: Loading user-defined proxy configuration …
network: Done.
network: Loading proxy configuration from Netscape Navigator …
network: Reading user preference file from
/home/bsm/clegg/.mozilla/VNC/
1ncpdqjn.slt/prefs.js
network: Done.
network: Loading browser proxy configuration …
network: Done.
network: Proxy Configuration: Browser Proxy Configuration


c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
p: reload proxy configuration
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to

basic: New window ID: 1602715
basic: Value of xembed: 1
basic: Referencing classloader: sun.plugin.ClassLoaderInfo@15093f1, refcount=1
basic: setWindow: call before applet exists:1602715
basic: Added progress listener:
sun.plugin.util.GrayBoxPainter$GrayBoxProgressListener@f0c85e
basic: Loading applet …
basic: Initializing applet …
basic: Starting applet …
basic: completed perf rollup
network: No certificate info for unsigned JAR file:
http://trunk.cathdb.info/jalview/jalviewApplet.jar
network: Cache entry found [url: [http://trunk.cathdb.info/jalview/jalviewApplet.jar](http://trunk.cathdb.info/jalview/jalviewApplet.jar), version: null]
network: Connecting http://trunk.cathdb.info/jalview/jalviewApplet.jar
with proxy=DIRECT
network: Connecting socket://trunk.cathdb.info:80 with proxy=DIRECT
network: Connecting http://trunk.cathdb.info/jalview/jalviewApplet.jar
with cookie “__utma=67540611.1677045735.1214924216.1220970870.1220982167.8;
ssid=1058620842740559744”
network: ResponseCode for
http://trunk.cathdb.info/jalview/jalviewApplet.jar : 200
network: Encoding for http://trunk.cathdb.info/jalview/jalviewApplet.jar : null
network: Disconnect connection to
http://trunk.cathdb.info/jalview/jalviewApplet.jar
network: Connecting http://trunk.cathdb.info/jalview/jalviewApplet.jar
with proxy=DIRECT
network: Connecting socket://trunk.cathdb.info:80 with proxy=DIRECT
network: Connecting http://trunk.cathdb.info/jalview/jalviewApplet.jar
with cookie “__utma=67540611.1677045735.1214924216.1220970870.1220982167.8;
ssid=1058620842740559744”
network: Downloading resource:
http://trunk.cathdb.info/jalview/jalviewApplet.jar
Content-Length: 368,045
Content-Encoding: null
network: Wrote URL http://trunk.cathdb.info/jalview/jalviewApplet.jar
to File /home/bsm/clegg/.java/deployment/cache/6.0/58/3495abba-31869a75-temp
network: No certificate info for unsigned JAR file:
http://trunk.cathdb.info/jalview/jalviewApplet.jar
network: CleanupThread used 3245195 us

2009-04-03 14:00:08
Full thread dump Java HotSpot™ Client VM (11.0-b15 mixed mode, sharing):

[snip]

Found one Java-level deadlock:

“Thread-7”:
waiting to lock monitor 0x0807ff64 (object 0xcc90e2b0, a
sun.misc.URLClassPath),
which is held by “thread applet-jalview.bin.JalviewLite”
“thread applet-jalview.bin.JalviewLite”:
waiting to lock monitor 0x083ad2ac (object 0xcc90e2d0, a
sun.plugin.security.PluginClassLoader),
which is held by “Thread-7”

Java stack information for the threads listed above:

“Thread-7”:
at sun.misc.URLClassPath.getLoader(URLClassPath.java:278)

  • waiting to lock <0xcc90e2b0> (a sun.misc.URLClassPath)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:167)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:192)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:155)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
  • locked <0xcc90e2d0> (a sun.plugin.security.PluginClassLoader)
    at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:127)
  • locked <0xcc90e2d0> (a sun.plugin.security.PluginClassLoader)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
  • locked <0xcc90e2d0> (a sun.plugin.security.PluginClassLoader)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at jalview.bin.a.run(Unknown Source)
    “thread applet-jalview.bin.JalviewLite”:
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at com.sun.deploy.cache.CacheEntry.readManifest(CacheEntry.java:929)
    at com.sun.deploy.cache.CacheEntry.readManifest(CacheEntry.java:873)
    at com.sun.deploy.cache.Cache.getCacheEntry(Cache.java:1615)
    at com.sun.deploy.cache.Cache.getCacheEntry(Cache.java:1553)
    at com.sun.deploy.cache.Cache.getCacheEntry(Cache.java:1535)
    at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(DownloadEngine.java:817)
    at com.sun.deploy.cache.DeployCacheHandler.get(DeployCacheHandler.java:153)
  • locked <0xcc8ff998> (a com.sun.deploy.cache.DeployCacheHandler)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:683)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:656)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:979)
  • locked <0xcc92f8d8> (a sun.net.www.protocol.http.HttpURLConnection)
    at sun.plugin.PluginURLJarFileCallBack.downloadJAR(PluginURLJarFileCallBack.java:74)
    at sun.plugin.PluginURLJarFileCallBack.access$000(PluginURLJarFileCallBack.java:48)
    at sun.plugin.PluginURLJarFileCallBack$2.run(PluginURLJarFileCallBack.java:133)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.PluginURLJarFileCallBack.retrieve(PluginURLJarFileCallBack.java:120)
    at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:186)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:50)
    at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:68)
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(CachedJarURLConnection.java:189)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(CachedJarURLConnection.java:144)
  • locked <0xcc931a38> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(CachedJarURLConnection.java:90)
  • locked <0xcc931a38> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
    at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:647)
    at sun.misc.URLClassPath$JarLoader.access$600(URLClassPath.java:538)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:605)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:597)
    at sun.misc.URLClassPath$JarLoader.(URLClassPath.java:559)
    at sun.misc.URLClassPath$3.run(URLClassPath.java:331)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath.getLoader(URLClassPath.java:320)
    at sun.misc.URLClassPath.getLoader(URLClassPath.java:297)
  • locked <0xcc90e2b0> (a sun.misc.URLClassPath)
    at sun.misc.URLClassPath.findResource(URLClassPath.java:144)
    at java.net.URLClassLoader$2.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findResource(URLClassLoader.java:359)
    at sun.applet.AppletClassLoader.findResource(AppletClassLoader.java:456)
    at java.lang.ClassLoader.getResource(ClassLoader.java:978)
    at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1168)
    at sun.applet.AppletClassLoader.getResourceAsStream(AppletClassLoader.java:392)
  • locked <0xcc910270> (a java.lang.Object)
    at java.lang.Class.getResourceAsStream(Class.java:2030)
    at jalview.bin.b.c(Unknown Source)
    at jalview.bin.b.b(Unknown Source)
    at jalview.bin.b.(Unknown Source)
    at jalview.bin.JalviewLite.init(Unknown Source)
    at sun.applet.AppletPanel.run(AppletPanel.java:424)
    at java.lang.Thread.run(Thread.java:619)

Found 1 deadlock.

Hi Ian.

Thanks for the email - I'm glad integration was easy - we aim to please!

There have been some odd deadlock problems with the applet in the past -
they were very hard to track down because they were not reliably
reproducible. Hopefully this isn't the case here.

Firstly - do you experience the same hangs with any of the example pages
(either on www.jalview.org/examples/applets.html or
http://www.compbio.dundee.ac.uk/~ws-dev1/jalview/latest/applet/appletJavascript.html)

If these don't work then its a systemic problem - otherwise it must be
something peculiar to the CATH page. To further diagnose the problem,
could I also ask you to run the hotspot check again with a couple of
changes:

1. use the version of the applet here:
http://www.compbio.dundee.ac.uk/~ws-dev1/jalview/latest/applet/debug/jalviewApplet.jar

2. set the applet debug parameter by adding

<param name="debug" value="true"/>

    to the applet tag.

The debug flag means that gobs of information gets output to the console
- hopefully the last message that is emitted will tell me a bit more
about where the deadlock is occuring. The thread dump with the different
Jar should also include line numbers and class names, so I can see
precisely what's going on. As far as i can tell the deadlock is due to
two threads trying to grab the classloader at the same time - I have my
suspicions but I need to know for certain :slight_smile:

When you've done all this, send me the info back directly rather than
posting to the list.

Cheers!
Jim.

···

--
-------------------------------------------------------------------
J. B. Procter (ENFIN/VAMSAS) Barton Bioinformatics Research Group
Phone/Fax:+44(0)1382 388734/345764 http://www.compbio.dundee.ac.uk
The University of Dundee is a Scottish Registered Charity, No. SC015096.