内容纲要
概要描述
日常排查问题时,经常会用到JVM内存分析相关的命令,如:jps,jstat,jmap,jstack,jinfo等,具体用法参考KB:JVM的内存分析命令解析
详细说明
问题现象
使用jvm命令时报错:Can’t attach to the process,如图执行 jinfo pid 报错:
解决方案
先执行
echo 0 > /proc/sys/kernel/yama/ptrace_scope
再重新执行命令即可,如图:
原因
原理
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