Я пытаюсь получить журнал, отслеживающий каждый адрес виртуальной памяти, к которому обращается Apache Spark executor. Я пробовал Intel Pin и bpftrace, но ни один из них не работал.
В Intel Pin есть пример , который печатает все адреса виртуальной памяти процесса, но дает только тот случай, когда команда для трассировки указывается вместо присоединения к существующему процессу. Исполнитель Spark запускается другим процессом, называемым драйвером, поэтому мы можем только прикрепить инструмент к процессу, а не давать команду, которая его запускает. Хотя вывод Intel может подключаться к работающему процессу с помощью аргумента -pid
, он будет обрабатывать sh Java процессов при подключении к ним, независимо от того, является ли он исполнителем Spark или просто простой программой Java.
Bpftrace может отслеживать некоторые обращения к памяти на JVM с поддержкой Dtrace через эти пробники , но это далеко не "все обращения к памяти".
Теперь я пытаюсь взломать Spark, чтобы увидеть, можно ли использовать pin, если команда pin отправляется исполнителю как часть команды executor. Но мне интересно, есть ли инструменты для этой работы, в конце концов, это не так уж сложно.