Quanto mais eu leio, mais confuso fico. Eu quero gerar uma lista de processos e seu consumo de memória (físico + virtual).
Até agora, foi o que fiz:
Em vez de mostrar todos os tópicos, eu resumi os processos com o mesmo usuário + comm.
Isso me dá uma lista semelhante a esta:
MEM VMEM PMEM User Command
16.27 GB 15.47 GB 811.73 MB apache httpd
2.37 GB 2.19 GB 186.12 MB mysql mysqld
372.99 MB 320.18 MB 52.81 MB memcached memcached
985.78 MB 954.60 MB 31.18 MB root httpd
A coluna MEM é basicamente VMEM (VSZ - RSS) + PMEM (o RSS).
Mas fiquei um pouco confuso com isso. O Apache gera ~ 10 threads, e essa lista diz que está consumindo 16 GB de memória. O disco rígido é de apenas ~ 14 GB e temos 8 GB de RAM.
Então eu pensei: "Embora o VSZ seja diferente para cada thread, talvez seja um valor absoluto para cada thread". Então, se eu peguei a coluna VSZ e subtrai o RSS de cada thread, eu entendi:
MEM VMEM PMEM User Command
1.38 GB 680.54 MB 737.68 MB apache httpd
2.55 GB 2.37 GB 186.09 MB mysql mysqld
425.80 MB 372.99 MB 52.81 MB memcached memcached
1016.96 MB 985.78 MB 31.18 MB root httpd
E eu pensei: "Bem, isso deve ser verdade!".
A pergunta é, estou certo? Eu simplesmente não consigo acreditar que o apache esteja consumindo 16 GB de memória.
Estou fazendo algo horrível errado aqui?
Atualizado: estou obtendo os mesmos valores ao usar top
. É também uma máquina do CentOS.