为何不带file参数执行jmap出现ptrace异常,添加参数后运行正常?
异常产生的根因
- 不带任何参数执行
jmap <pid>时,OpenJDK 8 底层依赖 Serviceability Agent(SA) 组件完成内存信息采集,该组件必须调用ptrace系统调用attach到目标JVM进程,才能读取进程内存数据。 - 从你提供的执行提示符可以判断,当前命令是在Kubernetes/Docker容器内执行:容器默认的seccomp安全策略会禁止
ptrace系统调用,同时多数Linux发行版默认的内核参数kernel.yama.ptrace_scope=1也会限制非父进程对目标进程的ptrace操作,最终触发Operation not permitted报错。
添加file参数后执行正常的原因
jmap -dump:file=test.hprof 7命令走的是JVM内置的 Attach API 通信链路,不需要调用ptrace系统调用:Attach API通过Unix域套接字和目标JVM进程通信,仅要求命令执行用户和目标JVM启动用户权限匹配、能够访问/tmp目录下的JVM attach临时文件即可完成交互,不会触发ptrace相关的权限限制。
内容的提问来源于stack exchange,提问作者jiankunking
相关产品推荐
相关产品推荐

