因为需要分析java内存增长原因,今天准备去dump一个 java 线程下来,下面是docker 内部执行dump操作时遇到的问题与解决步骤。
开始dump
# 执行 jstack
jstack -l 219 > test.dump
219: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
上面执行 jstack 时,提示target process not responding or HotSpot VM not loaded
, 也提示了可以添加参数 -F
加上 -F 参数
jstack -l -F 219 > test.dump
额,又遇到问题了。
上网搜索了一下相关问题,网上说 ptrace-scope为了防止用户访问当前正在运行的进程的内存和状态 , 默认情况下不允许再访问了. 可以临时开启.
关闭ptrace-scope 防护
# 临时解决 0 开启, 1 关闭
echo 0 > /proc/sys/kernel/yama/ptrace_scope # 宿主机执行
# 永久设置
/etc/sysctl.d/10-ptrace.conf
# 1 修改为 0
kernel.yama.ptrace_scope = 0
再次dump
jstack -l -F 219 > test.dump
很好,这次就没上面问题了,很顺利的dump 下来了,接下来就可以对它展开分析了。
这次的错误就记录到此。