
Posso obter um maravilhoso mapa de memória de todos os processos com o comando Linux
pmap $(ps -A | awk '{print $1}'|grep -v PID) | sort | grep \^0
Parece
...
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
...
Os mapas de memória de todos os processos são mesclados aqui. Mas estou faltando a informação de onde o kernel tem suas páginas de memória. Existe uma ferramenta semelhante para o "mapa de memória completo"?
Responder1
Seu comando não faz muito sentido. Os endereços informados por pmap
para cada processo são válidos apenas no próprio espaço de endereçamento desses processos, ou seja, em sua memória virtual. Eles irão se "sobrepor", embora tecnicamente correspondam a páginas diferentes. Alguns deles não estarão na RAM, mas no disco.
As páginas pertencentes ao uso do kernel são, por outro lado, armazenadas na memória física.
Responder2
A melhor abordagem seria usar o sysrq.
Execute a seguir e verifique seu /var/log/messages.
# echo m > /proc/sysrq-trigger
Isso lhe daria um despejo de memória por zona. Confira o seguinte URL
https://www.kernel.org/doc/gorman/html/understand/understand005.html