LINUX.ORG.RU

perf для профилирования процесса в docker

 ,


0

2

Всем привет, вопрос такой

У заказчика развернута наша софтинка в виде docker-контейнера, которая работает с их специфичными данными. Воспроизвести проблему производительности не можем на наших стендах. Т.е. надо профилировать процесс на их машине.

Вопрос как это сделать? Запихнуть perf в контейнер не можем - версия perf зависит от ядра, на котором запущен хост.

Можно ли на хосте поставить perf и профилировать процесс в контейнере?


Ответ на: комментарий от ox55ff

Отладка/профилирование внутренности контенейра снаружи - черевата тем что утилита не увидит пути к загруженным библиотекам, не сможет сделать стектрейсы и т.п. Хотя не помню точно - возможно это касается не самого момента профилирования, а последкющего отдельного вызова построения отчёта.

Имхо - смотреть какая у заказчика версия ядра и таки запихивать в контейнер. Плюс, если я правильно помню, конкретно у perf нет совсем жёсткой привязки к версии ядра. Типа если напрямую запускать установленный бинарник под конкретную другую версию, то он хоть может написать предупреждение - по факту будет нормально работать, елси версии плюс-минус близки

GPFault ★★
()
Ответ на: комментарий от torm7

Ой, проглядел что надо с хоста. Значит как то так: nsenter -t CONTAINER_PID --pid perf

ну и разбавить опциями -m-u-n-i-m-p по вкусу.

torm7
()
Последнее исправление: torm7 (всего исправлений: 1)
Ответ на: комментарий от torm7

CONTAINER_PID это pid профилируемого процесса, видимый с хоста? –pid perf - тут я так понимаю это - –pid это параметр (enter pid namespace), а perf это уже запускаемая команда (не аргумент для –pid) после которой я могу perf его параметры передать?

sotlef
() автор топика
Последнее исправление: sotlef (всего исправлений: 1)
Ответ на: комментарий от sotlef

Команда означает следующее: Возьми процесс хоста CONTAINER_PID(пид контейнера), и запусти команду perf в том же namespace как и у процесса. В каких ns запускать, определяется параметрами:

  • -p - pid
  • -m - mount
  • -n - network

Пид профилируемого процесса надо смотреть в ns контейнера

torm7
()
Последнее исправление: torm7 (всего исправлений: 2)