В Linux jmap -heap
работает поверх Serviceability Agent, который, в свою очередь, использует системный вызов ptrace
.
По умолчанию ptrace
требуются права суперпользователя (или, точнее, CAP_SYS_PTRACE
возможность).Кроме того, профиль безопасности Docker по умолчанию запрещает ptrace
syscall с помощью seccomp или apparmor.
Таким образом, чтобы разрешить ptrace
и jmap -heap
в контейнере, может потребоваться добавить следующие параметры докера:
--cap-add=SYS_PTRACE --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined
Примечание: это не лучшее решение с точки зрения безопасности.Обратитесь к руководству докера, чтобы узнать, как включить определенный системный вызов без отключения seccomp и apparmor .
Еще лучшим вариантом было бы вообще избежать jmap -heap
.Существуют и другие эффективные способы мониторинга JVM без поддержки агента по удобству обслуживания, например, jcmd
, jstat
и JMX
.