Ошибка прикрепления к процессу при запуске 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,

Другие вопросы по тегам