在 Docker 內對 Apache 使用 ksm_preload

在 Docker 內對 Apache 使用 ksm_preload

我正在嘗試使用ksm_預先載入適用於 Docker 內的 Apache。問題是在 Docker 中運行時該庫沒有被映射。在外面它可以工作,我看到共享/易失性頁面。我認為問題出在 apache 中的某個地方,因為在具有相同 LD_PRELOAD 參數的同一容器中運行的其他應用程式(如 apt)顯示 KSM 中的活動。

運行 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,沒有改變

相關內容