Я пытаюсь использовать 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
, без изменений