visualvm
visualvm copied to clipboard
Deadlock when profiling NetBeans IDE
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:
- Run NetBeans IDE (upcoming 12.5 release or daily build). Run VisualVM (2.0.7)
- Attach to the running IDE
- 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
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.
Please provide Profiler->CPU settings.