Skip to content

Deadlock when profiling NetBeans IDE #328

@sdedic

Description

@sdedic

Describe the bug
After I attached VisualVM to NetBeans IDE, and let VisualVM instrument for CPU profiling the IDE locked up

To Reproduce
Steps to reproduce the behavior:

  1. Run NetBeans IDE (upcoming 12.5 release or daily build). Run VisualVM (2.0.7)
  2. Attach to the running IDE
  3. Select Profiler > CPU. Wait for initialization

The IDE is locked up indefinitely. A thread dump from the running ide is attached:
netbeans-tdump.txt

The interesting locked threads are:

"AWT-XAWT" #19 daemon prio=6 os_prio=0 tid=0x00007f9a900bb000 nid=0x7347 waiting for monitor entry [0x00007f9afcbf3000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at org.netbeans.ProxyClassPackages.findCoveredPkg(ProxyClassPackages.java:75)
	- waiting to lock <0x00000005cc8432a0> (a java.lang.Class for org.netbeans.ProxyClassPackages)
	at org.netbeans.ProxyClassLoader.doFindClass(ProxyClassLoader.java:156)
	at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:126)
	- locked <0x00000005cbcfbd18> (a org.netbeans.StandardModule$OneModuleClassLoader)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.checkRead(FileChangedManager.java:104)
	at org.netbeans.TopSecurityManager.notifyRead(TopSecurityManager.java:158)
	at org.netbeans.TopSecurityManager.checkRead(TopSecurityManager.java:313)
	at java.io.File.exists(File.java:814)
	at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:183)
	at java.io.File.getCanonicalPath(File.java:618)
	at java.io.FilePermission$1.run(FilePermission.java:224)
	at java.io.FilePermission$1.run(FilePermission.java:212)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.io.FilePermission.init(FilePermission.java:212)
	at java.io.FilePermission.<init>(FilePermission.java:299)
	at sun.net.www.protocol.file.FileURLConnection.getPermission(FileURLConnection.java:225)
	at sun.net.www.protocol.jar.JarURLConnection.getPermission(JarURLConnection.java:99)
	at sun.misc.URLClassPath.check(URLClassPath.java:649)
	at sun.misc.URLClassPath$JarLoader.checkResource(URLClassPath.java:971)
	at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:1056)
	at sun.misc.URLClassPath.getResource(URLClassPath.java:249)
	at sun.misc.URLClassPath.getResource(URLClassPath.java:302)
	at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1257)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1086)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1084)
	at java.lang.ClassLoader.getSystemResource(ClassLoader.java:1219)
	at org.graalvm.visualvm.lib.jfluid.server.ClassBytesLoader.getClassFileURL(ClassBytesLoader.java:74)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface.getClassFileBytes(ProfilerInterface.java:1469)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface.getClassFileBytes(ProfilerInterface.java:1462)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface.classLoadHook(ProfilerInterface.java:1052)
	at sun.awt.X11.XEvent.get_xcrossing(XEvent.java:46)
	at sun.awt.X11.XToolkit.processGlobalMotionEvent(XToolkit.java:448)
	at sun.awt.X11.XToolkit.dispatchEvent(XToolkit.java:495)
	at sun.awt.X11.XToolkit.run(XToolkit.java:622)
	at sun.awt.X11.XToolkit.run(XToolkit.java:538)
	at java.lang.Thread.run(Thread.java:748)

and

"Deadlock Detector" #44 prio=5 os_prio=0 tid=0x00007f9a913f6800 nid=0x73aa in Object.wait() [0x00007f9aef7fc000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.graalvm.visualvm.lib.jfluid.global.TransactionalSupport.beginTrans(TransactionalSupport.java:107)
	- locked <0x00000005cfcdd0a8> (a java.lang.Object)
	at org.graalvm.visualvm.lib.jfluid.global.TransactionalSupport.beginTrans(TransactionalSupport.java:76)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface.firstTimeMethodInvokeHook(ProfilerInterface.java:1134)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface.access$1600(ProfilerInterface.java:74)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerInterface$1.handleFirstTimeMethodInvoke(ProfilerInterface.java:591)
	at org.graalvm.visualvm.lib.jfluid.server.ProfilerRuntimeCPUFullInstr.rootMethodEntry(ProfilerRuntimeCPUFullInstr.java:295)
	at org.netbeans.ProxyClassPackages.findCoveredPkg(ProxyClassPackages.java:75)
	- locked <0x00000005cc8432a0> (a java.lang.Class for org.netbeans.ProxyClassPackages)
	at org.netbeans.ProxyClassLoader.doFindClass(ProxyClassLoader.java:156)
	at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:126)
	- locked <0x00000005cd58afa0> (a org.netbeans.StandardModule$OneModuleClassLoader)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at org.netbeans.modules.deadlock.detector.Detector.detectDeadlock(Detector.java:127)
	at org.netbeans.modules.deadlock.detector.Detector.run(Detector.java:110)
	at java.lang.Thread.run(Thread.java:748)

The application lock (0x00000005cc8432a0) and VisualVM's agent code are called in a reverse order.

Expected behavior
The IDE should run normally in profiled mode.

Desktop (please complete the following information):

  • OS: Linux Ubuntu 19.04
  • JDK version 1.8.0_241; Java HotSpot(TM) 64-Bit Server VM 25.241-b07

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions