visualvm icon indicating copy to clipboard operation
visualvm copied to clipboard

Deadlock when profiling NetBeans IDE

Open sdedic opened this issue 3 years ago • 2 comments

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

sdedic avatar Jul 19 '21 09:07 sdedic

projectopen-lock.txt projectopen-lock2.txt

Another similar case. To reproduce:

  • start NetBeans IDE, no projects opened (I had one in recent projects list)
  • attach visualvm to the IDE, start Profiling > CPU, wait for instrumentation to complete
  • open a project The ide locked up while 'waiting for projects opened', visualvm agent and the application seem mutually blocked.

sdedic avatar Jul 20 '21 08:07 sdedic

Please provide Profiler->CPU settings.

thurka avatar Jul 20 '21 11:07 thurka