Estou tentando usar o ksm_preload para Apache no Docker. O problema é que a biblioteca não é mapeada ao executar no Docker. Fora ele funciona e eu estou vendo páginas compartilhadas / voláteis. Acho que o problema está em algum lugar do apache, porque outros aplicativos (como o apt) em execução no mesmo contêiner com o mesmo parâmetro LD_PRELOAD mostram atividade no KSM.
Após executar make install, tentei o seguinte dentro do contêiner do docker
LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so apache2ctl -k start -D FOREGROUND
Eu também tentei definir /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 obtém o mapeamento da biblioteca, mas os processos do trabalhador 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 longa https://pastebin.com/KRvKHXxn
O apache tem algum tipo de proteção contra LD_PRELOAD?
Existe talvez uma outra biblioteca dinâmica com prioridade mais alta substituindo os símbolos?
talvez seja relevante: https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-libraries
tentou a solução com UNSET_RTLD_DEEPBIND=1
nenhuma alteração
fonte