
No Ubuntu 22.04 estou enfrentando um problema estranho de memória. Não consigo descobrir por que meu uso de memória é tão alto. Quando inicializo meu laptop, o uso de memória é o esperado, mas com o tempo algumas coisas parecem consumir minha memória, mas o sistema parece não saber para que é usado.
Depois que o laptop estiver funcionando por alguns dias e dormindo durante a noite, free -m
relata o seguinte:
total used free shared buff/cache available
Mem: 14812 7329 2683 1810 4799 5348
Swap: 2047 416 1631
Todas as inscrições foram encerradas e de acordo comesta ferramentaa memória acumulada usada por todos os aplicativos é de 1,7 GiB. Então, o que está usando os últimos ~ 5,5 GiB (7,2-1,7)?
Estou esquecendo de algo?
Responder1
Esta resposta foi escrita na tentativa de solucionar possíveis causas de uso de memória "não contabilizado", que pode ir além do que o OP está enfrentando.
Fundo
No Linux, o uso de memória pode ser atribuído em grande parte a dois elementos:
- Uso por processos/threads
- Uso por um sistema de arquivos
No caso desta questão, o OP não pode contabilizar toda a memória usada por processos/threads. Portanto, é muito provável que a memória restante seja usada pelo kernel para operações do sistema de arquivos.
Causas prováveis
Atualmente estou ciente de três razões principais para o uso excessivo de memória do sistema de arquivos:
- Cache ZFS ARC (ou cache de sistema de arquivos semelhante, que é registrado como uso de memória "normal")
- Ramdisks (
tmpfs
e sistemas de arquivos semelhantes) - Compressão nativa do sistema de arquivos, combinada com E/S excessiva de disco (para que a compactação/recompactação ocorra com consumo constante de memória como resultado)
Para solucionar esses três cenários, eu recomendaria o seguinte:
1. Cache ZFS ARC
Execute este comando para obter informações detalhadas sobre o cache ARC do ZFS:
arcstat -a
A estatística relatada por size
aparecerá como memória usada normalmente.
Pela sua postagem, é óbvio que 0,5 GB são usados aqui.
2. Ramdiscos
Execute este comando para obter informações sobre quaisquer tmpfs
ramdisks atuais do sistema de arquivos:
df -hl -t"tmpfs"
Qualquer quantidade informada por used
aparecerá como memória usada normalmente.
O Ubuntu (e muitas outras variantes do Linux) tem um ramdisk padrão em /dev/shm
. Os aplicativos podem usar este espaço e, portanto, você pode verificar facilmente:
ls -ahl /dev/shm
Além disso, tmpfs
o uso também é mostrado shared
na free
saída, portanto, pela sua postagem, é óbvio que 1,8 GB é usado aqui.
3. Compressão FS
Verifique o disco IO com este comando: ( iostat
faz parte do sysstat
pacote)
iostat
Combine isso com o conhecimento sobre a compactação do sistema de arquivos habilitada para os discos relevantes. Para ZFS, execute este comando para obter propriedades de compactação para todos os Zpools e conjuntos de dados:
zfs get compression
Se você tiver alta E/S de disco, combinada com a compactação nativa habilitada, isso poderá resultar em memória excessiva relatada como memória usada normalmente.
Responder2
Você está usando compactação em seu sistema de arquivos ou um sistema de arquivos copy-on-write como BTRFS ou ZFS?
É possível que o uso excessivo de memória seja devido ao kernel tentar (re)compactar arquivos em tempo real ou copiar/versionar cada gravação quando arquivos grandes são alterados com frequência.
A pressão da memória torna-se especialmente perceptível se você tiver arquivos grandes, como imagens para máquinas virtuais, onde os arquivos mudam com frequência e são dimensionados em gigabytes em vez de megabytes.
Você pode desabilitar a compactação em um nível de sistema de arquivos/subvolume/volume ou em nível de arquivo individual e/ou desabilitar COW (cópia na gravação)
BTRFS:
É compatível com a remoção da compactação de arquivos específicos com o comando btrfs:
property set <file> compression none
para remover COW (cópia na gravação) de uma pasta específica:
chattr -R +C /directory/of/your/vm_images/
ZFS:
Não acredito que você possa remover a compactação de arquivos individuais. Desabilitar a compactação em um volume afetará apenas gravações futuras, portanto, você precisará copiar cada arquivo individualmente para que a compactação seja desativada.
zfs set compression=off name_of_zfs_vol