运行jmap -heap pid时将错误附加到进程

时间:2018-12-14 01:53:17

标签: jvm jmap

我使用docker容器部署了微服务,并希望检查jvm信息。因此,我进入容器并找到pid。然后我运行jmap -heap pid命令,但得到以下错误日志:

error log capture

如何解决?

1 个答案:

答案 0 :(得分:0)

在Linux中,jmap -heap在Serviceability Agent之上运行,而Serviceability Agent又依赖于ptrace syscall。

默认情况下,ptrace需要root特权(或更准确地说,是CAP_SYS_PTRACE功能)。此外,docker默认安全配置文件通过seccomp或apparmor拒绝ptrace系统调用。

因此,为了允许ptracejmap -heap放在容器中,可能需要添加以下docker选项:

--cap-add=SYS_PTRACE --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined

注意:从安全角度来看,这不是最佳解决方案。查阅docker手册以查找如何在不关闭seccompapparmor的情况下启用特定的系统调用。

更好的选择是完全避免使用jmap -heap。在没有Serviceability Agent支持的情况下,还有其他有效的方法来监视JVM,例如jcmdjstatJMX