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/envvarsos 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=1nenhuma alteração

Sidias-Korrado
fonte