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