Vou citar algo que escrevi na página do manual para um aplicativo que faz análises semelhantes às informações principais e de desenho das mesmas fontes que pmap
(por exemplo, /proc/[N]/maps
):
VIRTUAL ADDRESS SPACE VS. PHYSICAL MEMORY
It is important to understand the difference between virtual address space and physical memory in
interpreting some of the above statistics. As the name implies, virtual address space is not real;
it's basically a map of all the memory currently allocated to a process. The limit on the size of
this map is the same for each processes (generally, 2-4 GB), and it is not accumulated (ie, you may
have dozens or hundreds of processes, each with its own 2-4 GB virtual address space, on a system
that only actually has 512 MB of physical memory).
Data cannot actually be stored or retrieved from virtual address space; real data requires real,
physical memory. It is the kernel's job to manage one in relation to another. Virtual space stats
(VirtualSz, Data+Stack, and Priv&Write) are useful for considering the structure of a process and the
relationship to physical memory use, but with regard to amount of RAM actually used, the physical
memory stats (ResidentSz, Share, and Proportion) are what counts.
pmap
está reportando principalmente informações sobre o espaço de endereço virtual . Sua observação de que "os valores são quase iguais" em top
output presumivelmente se refere à figura da VIRT, que é muito diferente da figura do RES. Estes correspondem exatamente ao que acima eu rotulei de "VirtualSz" e "ResidentSz" (o VIRT é para virtual, o RES é para residente).
Now, when we use pmap -x, I see an extra coloumn Dirty which shows far less memory usage for the process. As seen in the example show below, the Dirty coloumn shows 15M as opposed to 379M in the first coloumn. My question is: Is the value under coloumn Dirty is the 'real' amount of memory actively used by that process?
Não, mas mais ou menos. Memória "suja" refere-se a dados que foram carregados do disco e modificados subseqüentemente; desde que foi modificado, deve ser parte de memória residente porque estas mudanças estão atualmente armazenadas na RAM. No entanto, não é sinônimo disso.