EAP 6 classloader deadlocks on JRockit JVM

Solution Unverified - Updated

Environment

  • JBoss Enterprise Application Platform (EAP) 6.x
  • JRockit 1.6

Issue

  • EAP 6 deadlocks in classloading on the JRockit JDK like so:

"ServerService Thread Pool -- 327" id=805 idx=0x7b4 tid=24043 prio=5 alive, blocked, native_blocked
    -- Blocked trying to get lock: org/jboss/modules/ModuleClassLoader@0x6bcfcf18[fat lock]
    at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method)
    at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1411)
    at jrockit/vm/Locks.lockFat(Locks.java:1512)
    at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1054)
    at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1005)
    at jrockit/vm/Locks.monitorEnter(Locks.java:2179)
    at org/jboss/modules/ModuleClassLoader.defineClass(ModuleClassLoader.java:450)
    at org/jboss/modules/ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277)
    at org/jboss/modules/ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92)
    at org/jboss/modules/Module.loadModuleClass(Module.java:568)
    at org/jboss/modules/ModuleClassLoader.findClass(ModuleClassLoader.java:205)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389)
    at org/jboss/modules/ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134)
    at jrockit/vm/Classes.loadClassInternal(Classes.java:76)
    ^-- Holding lock: org/jboss/modules/ModuleClassLoader@0x6bcefbe0[fat lock]
    at jrockit/vm/RNI.c2java(JJJJJ)V(Native Method)
    at jrockit/vm/Classes.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;(Native Method)
    at java/lang/Class.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;(Native Method)
    at java/lang/Class.forName(Class.java:171)

"ServerService Thread Pool -- 328" id=806 idx=0x7b8 tid=24044 prio=5 alive, blocked, native_blocked
    -- Blocked trying to get lock: org/jboss/modules/ModuleClassLoader@0x6bcefbe0[fat lock]
    at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method)
    at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1411)
    at jrockit/vm/Locks.lockFat(Locks.java:1512)
    at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1054)
    at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1005)
    at jrockit/vm/Locks.monitorEnter(Locks.java:2179)
    at org/jboss/modules/ModuleClassLoader.defineClass(ModuleClassLoader.java:450)
    at org/jboss/modules/ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277)
    at org/jboss/modules/ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92)
    at org/jboss/modules/Module.loadModuleClass(Module.java:568)
    at org/jboss/modules/ModuleClassLoader.findClass(ModuleClassLoader.java:205)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408)
    at org/jboss/modules/ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389)
    at org/jboss/modules/ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134)
    at jrockit/vm/Classes.loadClassInternal(Classes.java:76)
    ^-- Holding lock: org/jboss/modules/ModuleClassLoader@0x6bcfcf18[fat lock]
    at jrockit/vm/RNI.c2java(JJJJJ)V(Native Method)
    at jrockit/vm/RNI.generateVirtualCode(Ljava/lang/Object;JJ)J(Native Method)

Resolution

  • Set the jboss.modules.safe-jdk system property to false to disable that safe classloading mode:
-Djboss.modules.safe-jdk=false

Root Cause

  • EAP 6 classloading assumes jrockit JVMs are "safe", meaning the classloader locking done by the JVM will not pose concerns of deadlocks.
Category

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.