O processo afirma usar muita memória, mas 'free' indica que a memória ainda está livre

2

Eu vi o oposto disso, mas isso é intrigante.

Em suma, eu tenho um processo onde% MEM afirma usar 74% de memória ao usar 'ps' e 'top'. No entanto, 'free' mostra que estou usando apenas 32% da memória disponível.

Aqui está a saída de "top":

top - 18:25:49 up 203 days, 14 min,  1 user,  load average: 3.48, 3.75, 3.79
Tasks: 349 total,   1 running, 347 sleeping,   1 stopped,   0 zombie
Cpu(s): 10.3%us,  4.7%sy,  0.0%ni, 75.1%id,  6.5%wa,  0.0%hi,  3.4%si,0.0%st
Mem:   189.054G total,  188.280G used,  793.473M free,  253.570M buffers
Swap: 4095.996M total,  967.234M used, 3128.762M free,  126.370G cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
14416 root      20   0  165g 139g  81g S 250.3 74.0 764266:39 asd
30660 root      20   0 15164 1328  836 R  2.0  0.0   0:00.01 top

Você notará que o processo 'asd' afirma usar 74% (139g) da RAM disponível. Se você olhar para a memória total usada - a memória em cache (188-126), parece que todo o sistema está usando apenas 62G. Isso é obviamente muito menor do que o único processo 'asd' afirma usar.

'livre' é tão confuso. Mostra 61G livre:

# free -g
         total       used       free     shared    buffers     cached
Mem:           189        188          0         81          0        126
-/+ buffers/cache:         61        127
Swap:            3          0          3

'ps' parece concordar com a listagem de processos em 'top':

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     14416  261 74.0 173381464 146791980 ? Ssl  Jan25 764310:00 /usr/bin/asd

Eu entendo porque o 'free' alegaria que há menos memória disponível do que 'top', mas não vejo como um processo pode reivindicar usar mais RAM do que os relatórios gerais do sistema como 'usados'.

ATUALIZAÇÃO: Eu não acho que isso é o mesmo que os posts que você me indicou para Tim. Eles parecem referir-se à questão oposta, em que as pessoas interpretam erroneamente a saída "livre" e não levam em consideração o cache e os buffers. Conseqüentemente, eles não podem encontrar processos que estão usando a memória que eles acham que 'livre' está afirmando usar. No meu caso, eu tenho um processo que diz usar muita memória, mas 'free' parece pensar que a memória ainda está disponível.

    
por Joel Griffiths 16.08.2017 / 20:56

1 resposta

2

Acho que há uma explicação simples, a diferença entre free e top com ps . Se você marcar top output, verá 126.370G cached memory, que a memória free mostrará como uma memória disponível. Como isso conta? Você tem 189.054G de memória total, seu processo usa 139G de memória residente, então você deve ter 50G de memória para buffers e etc. Se você verificar sua memória compartilhada de processo, verá que ela possui 81G de memória compartilhada , poderia contar na sua memória residente. Então, se o seu processo funcionar com arquivos, eles poderiam estar localizados em buffers e compartilhar com o seu processo (apenas supondo, eu não sei como a memória compartilhada conta com arquivos). Então, essa é apenas uma das razões para ter muito espaço livre.

    
por 16.08.2017 / 22:37