
使用しようとしていますksm_プリロードDocker 内の Apache 用。問題は、Docker 内で実行しているときにライブラリがマップされないことです。外部では機能し、共有/揮発性ページが表示されます。同じコンテナ内で同じ LD_PRELOAD パラメータを使用して実行されている他のアプリケーション (apt など) が KSM でアクティビティを示しているため、問題は Apache のどこかにあると思います。
make installを実行した後、dockerコンテナ内で次のことを試しました
LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so apache2ctl -k start -D FOREGROUND
/etc/apache2/envvars
ワーカープロセスの設定も試しました:
export LD_DEBUG=all
export LD_PRELOAD=/usr/local/share/ksm_preload/libksm_preload.so
親プロセスはライブラリをマップしますが、子ワーカープロセスはマップしません。
親プロセスの /proc/pid/map_files:
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
常に次の結果になります。
/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
LDデバッグ出力はかなり長いhttps://pastebin.com/KRvKHXxn
Apache には LD_PRELOAD に対する何らかの保護機能がありますか?
シンボルを上書きする優先度の高い別の動的ライブラリがあるのでしょうか?
おそらく関連あり:https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-libraries
解決策を試したがUNSET_RTLD_DEEPBIND=1
、変化はなかった