Estou tentando usar o ksm_preload para o Apache dentro do Docker. O problema é que a biblioteca não é mapeada durante a execução no Docker. Fora funciona e estou vendo páginas compartilhadas / voláteis. Eu acho que o problema está em algum lugar no apache, porque outros aplicativos (como apt) em execução no mesmo contêiner com o mesmo parâmetro LD_PRELOAD mostram atividade no KSM.
Depois de executar a instalação, 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
para os processos de trabalho:
export LD_DEBUG=all
export LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so
O processo pai obtém a biblioteca mapeada, mas os processos do worker 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 link
O apache tem algum tipo de proteção contra LD_PRELOAD?
Existe alguma outra biblioteca dinâmica com prioridade mais alta sobrescrevendo os símbolos?
talvez relevante: link
tentei a solução com UNSET_RTLD_DEEPBIND=1
, sem alteração