Можем ли мы отследить все виртуальные адреса, к которым обращается процесс Java с учетом pid? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь получить журнал, отслеживающий каждый адрес виртуальной памяти, к которому обращается Apache Spark executor. Я пробовал Intel Pin и bpftrace, но ни один из них не работал.

В Intel Pin есть пример , который печатает все адреса виртуальной памяти процесса, но дает только тот случай, когда команда для трассировки указывается вместо присоединения к существующему процессу. Исполнитель Spark запускается другим процессом, называемым драйвером, поэтому мы можем только прикрепить инструмент к процессу, а не давать команду, которая его запускает. Хотя вывод Intel может подключаться к работающему процессу с помощью аргумента -pid, он будет обрабатывать sh Java процессов при подключении к ним, независимо от того, является ли он исполнителем Spark или просто простой программой Java.

Bpftrace может отслеживать некоторые обращения к памяти на JVM с поддержкой Dtrace через эти пробники , но это далеко не "все обращения к памяти".

Теперь я пытаюсь взломать Spark, чтобы увидеть, можно ли использовать pin, если команда pin отправляется исполнителю как часть команды executor. Но мне интересно, есть ли инструменты для этой работы, в конце концов, это не так уж сложно.

...