Ошибка прикрепления к процессу при запуске jmap -heap pid
Я развернул микросервис с док-контейнером и хочу проверить информацию JVM. Я вхожу в контейнер и нахожу пид. Затем я запускаю команду jmap -heap pid, но получаю следующий журнал ошибок:
Как это исправить?
1 ответ
В линуксе jmap -heap
работает поверх Serviceability Agent, который, в свою очередь, опирается на ptrace
Системный вызов.
По умолчанию ptrace
требует привилегий root (или, точнее, 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 без поддержки Serviceability Agent, например jcmd
, jstat
а также JMX
,