커널이 어떤 메모리 페이지를 소유하고 있는지 확인

커널이 어떤 메모리 페이지를 소유하고 있는지 확인

Linux 명령을 사용하여 모든 프로세스에 대한 멋진 메모리 맵을 얻을 수 있습니다.

pmap $(ps -A | awk '{print $1}'|grep -v PID) | sort | grep \^0

그것은 다음과 같습니다

...
00007fd6dbf45000      4K rw---  /lib/libnss_compat-2.11.1.so 
00007fd6dbf46000   1524K r-x--  /lib/libc-2.11.1.so
00007fd6dc0c3000   2044K -----  /lib/libc-2.11.1.so  
...

모든 프로세스의 메모리 맵이 여기에 병합됩니다. 하지만 커널에 메모리 페이지가 있는 정보가 누락되었습니다. "완전한 메모리 맵"을 위한 유사한 도구가 있습니까?

답변1

당신의 명령은 별로 의미가 없습니다. 각 프로세스에 대해 보고된 주소는 pmap해당 프로세스의 자체 주소 공간, 즉 가상 메모리에서만 유효합니다. 기술적으로는 서로 다른 페이지에 해당하지만 일종의 "중복"됩니다. 그 중 일부는 RAM이 아닌 디스크에 있습니다.

반면에 커널이 소유한 페이지는 실제 메모리에 저장됩니다.

답변2

더 나은 접근 방식은 sysrq를 사용하는 것입니다.

다음을 실행하고 /var/log/messages를 확인하세요.

# echo m > /proc/sysrq-trigger

이렇게 하면 영역별 메모리 덤프가 제공됩니다. 다음 URL에서 결제하세요.

https://www.kernel.org/doc/gorman/html/understand/understand005.html

관련 정보