Unable to use jstack or jmap when running Jenkins inside Docker container

Article ID:360037139692
1 minute readKnowledge base

Issue

Attempting to run jstack or jmap on the Jenkins process results in the following exception:

Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for my_pid: Operation not permitted

sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for my_pid: Operation not permitted

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163)

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:278)

                at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:671)

                at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)

                at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)

                at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)

                at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)

                at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)

                at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)

                at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                at java.lang.reflect.Method.invoke(Method.java:498)

                at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)

                at sun.tools.jstack.JStack.main(JStack.java:106)

Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for my_pid: Operation not permitted

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$100(LinuxDebuggerLocal.java:62)

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1AttachTask.doit(LinuxDebuggerLocal.java:269)

                at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)

Resolution

You can try using jcmd as an alternative:

For threads:

jcmd [PID] Thread.print > [FILE]

For heap:

jcmd [PID] GC.heap_dump [PATH]