使用 JVM 命令报错: Can’t attach to the process

  其他常见问题
内容纲要

概要描述

日常排查问题时,经常会用到JVM内存分析相关的命令,如:jps,jstat,jmap,jstack,jinfo等,具体用法参考KB:JVM的内存分析命令解析

详细说明


问题现象

使用jvm命令时报错:Can’t attach to the process,如图执行 jinfo pid 报错:

file

解决方案

先执行

echo 0 > /proc/sys/kernel/yama/ptrace_scope

再重新执行命令即可,如图:

file

原因

原理

ptrace-scope 是 Linux 内核中的一个安全机制,它与 Yama Linux 安全模块相关联,用于限制进程间的 ptrace 调用。
ptrace 是 Linux 系统中的一个系统调用,允许一个进程(追踪者)附加到另一个进程(被追踪者)上,以检查和控制其执行。这种能力如果被滥用,可能会导致安全问题,例如允许攻击者附加到其他用户的进程并窃取敏感信息。

ptrace-scope 的值可以通过 /proc/sys/kernel/yama/ptrace_scope 文件进行配置,并可以设置为以下几种模式:

0: 无限制,进程可以附加到任何其他进程上。

1: 限制附加,只有以下几种情况可以附加:

  • 父进程或其后代。
  • 具有 CAP_SYS_PTRACE 能力(系统管理员权限)的进程。
  • 被追踪进程通过 PR_SET_PTRACER 明确允许的进程。

2: 只有具有 CAP_SYS_PTRACE 能力的进程才能附加,且这些进程必须在被追踪进程的用户命名空间中。

3: 完全禁止附加。

参数修改

1)该参数可以临时开启,如:

echo 0 > /proc/sys/kernel/yama/ptrace_scope

2)也永久写到文件来持久化,如:
编辑 /etc/sysctl.d/10-ptrace.conf

添加或修改:(0:允许, 1:不允许)

kernel.yama.ptrace_scope = 0

执行生效:

sysctl -p /etc/sysctl.d/10-ptrace.conf

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。