4

Я пытаюсь использовать ksm_preload для Apache внутри Docker. Проблема в том, что библиотека не отображается при запуске в Docker. Снаружи это работает, и я вижу общие / изменчивые страницы. Я думаю, что проблема лежит где-то в apache, потому что другие приложения (например, apt), работающие в том же контейнере с тем же параметром LD_PRELOAD, показывают активность в KSM.

После запуска make install я попробовал следующее внутри контейнера Docker

LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so apache2ctl -k start -D FOREGROUND

Я также попытался установить /etc/apache2/envvars для рабочих процессов:

export LD_DEBUG=all
export LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so

Родительский процесс получает отображенную библиотеку, а дочерние рабочие процессы - нет.

/proc/pid/map_files родительского процесса:

7f2e13aef000-7f2e13af1000 -> /usr/local/share/ksm_preload/libksm_preload.so
7f2e13af1000-7f2e13cf0000 -> /usr/local/share/ksm_preload/libksm_preload.so
7f2e13cf0000-7f2e13cf1000 -> /usr/local/share/ksm_preload/libksm_preload.so

Всегда следующий результат:

/sys/kernel/mm/ksm/pages_shared:0
/sys/kernel/mm/ksm/pages_sharing:0
/sys/kernel/mm/ksm/pages_to_scan:100
/sys/kernel/mm/ksm/pages_unshared:0
/sys/kernel/mm/ksm/pages_volatile:0
/sys/kernel/mm/ksm/run:1

Вывод отладки LD довольно длинный https://pastebin.com/KRvKHXxn

Apache имеет какую-то защиту от LD_PRELOAD?

Может быть, есть другая динамическая библиотека с более высоким приоритетом, перезаписывающая символы?

может быть уместно: https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-libraries пробовал решение с UNSET_RTLD_DEEPBIND=1 , без изменений

0