Ich versuche es zu benutzen ksm_preload für Apache in Docker. Das Problem ist, dass die Bibliothek nicht zugeordnet wird, wenn sie in Docker ausgeführt wird. Draußen funktioniert es und ich sehe freigegebene / flüchtige Seiten. Ich denke, das Problem liegt irgendwo in Apache, weil andere Anwendungen (wie apt), die in demselben Container mit demselben Parameter LD_PRELOAD laufen, Aktivität im KSM zeigen.

Nachdem ich make install ausgeführt hatte, versuchte ich folgendes im Docker-Container

LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so apache2ctl -k start -D FOREGROUND

Ich habe auch die Einstellung versucht /etc/apache2/envvars für die Arbeitsprozesse:

export LD_DEBUG=all
export LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so

Der übergeordnete Prozess erhält die Bibliothek zugeordnet, der untergeordnete Worker jedoch unterlassen Sie.

/ proc / pid / map_files des übergeordneten Prozesses:

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

Immer folgendes Ergebnis:

/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

Die LD-Debug-Ausgabe ist ziemlich lang https://pastebin.com/KRvKHXxn

Hat Apache einen Schutz vor LD_PRELOAD?

Gibt es vielleicht eine andere dynamische Bibliothek mit höherer Priorität, die die Symbole überschreibt?

vielleicht relevant: https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-libraries versuchte die Lösung mit UNSET_RTLD_DEEPBIND=1 , Keine Änderung

Sidias-Korrado
quelle