Como recuperar espaço de RAM que deveria ser livre?

0

Muitas pessoas usam o script ps_mem.py para saber quanto os processos de RAM usam. Nesse caso, o resultado do script foi algo assim:

---------------------------------
                        278.4 MiB
================================= 

Assim, todo o sistema usa 278,4 MiB, mas free diz algo realmente diferente:

# free
              total        used        free      shared  buff/cache   available
Mem:           1.8G        756M        980M         57M        131M        1.0G
Swap:          2.5G         11M        2.5G
Total:         4.3G        767M        3.4G

Então, aqui, o sistema utiliza 756M. Não é o cache e não é por causa dos arquivos tmp.

Eu também tentei:

# echo "3" > /proc/sys/vm/drop_caches

para ver se haverá alguma diferença, mas nada mudou.

Então, como liberar as páginas que são tiradas por algum motivo? Não faço ideia do que e porque utiliza o espaço e não sei como recuperá-lo. Por enquanto, a única opção é reiniciar a máquina.

Aqui está a foto onde você pode ver quais processos restam. Você pode explicar a utilização de RAM com base nisso?

    
por Mikhail Morfikov 08.05.2016 / 20:15

1 resposta

0

Devido à complexidade do gerenciamento de memória virtual (que é para o benefício de usar a menor quantidade possível), é praticamente impossível determinar quanta RAM está realmente em uso. Veja este link .

Assim, qualquer que seja o seu script python, ele não refletirá o estado atual.

O que é armazenado em cache é realmente gratuito, não se preocupe com isso (derrubar caches na verdade não libera nada, apenas libera as páginas que o kernel iria reutilizar se fosse necessário).

Quais relatórios gratuitos são o que o kernel conhece sobre o sistema. Não pode estar errado, já que o kernel é o que serve a memória. Mas não é igual à soma da memória usada de cada processo individual, devido a vários mecanismos: memória compartilhada (bibliotecas), memória copy-on-write (depois de forking, somente páginas que são tocadas são realmente duplicadas), não inicializadas out) páginas, código de programa carregado (também compartilhado), memória virtual não correspondente a RAM, páginas trocadas, memória compartilhada interprocess, memória kernel (reservada pelos módulos do kernel), memória kernel (o kernel principal, incluindo a tabela de páginas), e assim por diante ...

O ponto é ... se as páginas de relatórios do kernel forem usadas, elas devem ser usadas para algo. Se você quiser liberar alguma memória, ela deve vir de algum lugar: cada processo em execução, módulo e o próprio kernel, podem ter mecanismos para liberar alguma memória que talvez não precisem agora e serão recarregados posteriormente (cabe aos criadores de aplicativos se eles a necessidade de implementar a complexidade necessária para fazer isso). Mas o kernel cuidará disso se você realmente precisar de nova memória. Ele derrubará os caches do sistema de arquivos se você solicitar mais memória, ele empurrará as páginas obsoletas para swap se você estiver usando, se você usar o zram ou algo assim, ele irá compactar as páginas ... e no final, se você realmente ficar sem espaço, o OOM killer encontrará algo para impedir que o sistema seja bloqueado. Mas o processo é muito complicado para você achar que sabe mais do que o que está acontecendo dentro de você.

    
por 08.05.2016 / 20:36

Tags