
나는 사용하려고ksm_preloadDocker 내부의 Apache용. 문제는 Docker 내부에서 실행할 때 라이브러리가 매핑되지 않는다는 것입니다. 외부에서는 작동하며 공유/휘발성 페이지가 표시됩니다. 동일한 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
아파치에는 LD_PRELOAD에 대한 일종의 보호 기능이 있습니까?
기호를 덮어쓰는 우선순위가 더 높은 다른 동적 라이브러리가 있을까요?
어쩌면 관련성이 있을 수도 있습니다:https://stackoverflow.com/questions/13374240/why-ld-preload-doesnt-work-for-one-of-loaded-shared-librariesUNSET_RTLD_DEEPBIND=1
변경 사항 없이 솔루션을 시도했습니다 .