
estou tentando usarksm_preloadpara Apache dentro do Docker. O problema é que a biblioteca não é mapeada ao ser executada no Docker. Lá fora funciona e estou vendo páginas compartilhadas/voláteis. Acho que o problema está em algum lugar no Apache, porque outros aplicativos (como o apt) executados no mesmo contêiner com o mesmo parâmetro LD_PRELOAD mostram atividade no KSM.
Depois de executar make install, tentei o seguinte dentro do contêiner docker
LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so apache2ctl -k start -D FOREGROUND
Também tentei configurar /etc/apache2/envvars
os processos de trabalho:
export LD_DEBUG=all
export LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so
O processo pai mapeia a biblioteca, mas os processos de trabalho filho não.
/proc/pid/map_files do processo pai:
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
Sempre o seguinte resultado:
/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
A saída de depuração do LD é bastante longahttps://pastebin.com/KRvKHXxn
O apache tem algum tipo de proteção contra LD_PRELOAD?
Existe talvez outra biblioteca dinâmica com maior prioridade sobrescrevendo os símbolos?
talvez relevante:https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-libraries
tentei a solução com UNSET_RTLD_DEEPBIND=1
, sem alteração