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
quelle