Ao preencher toda a memória e trocar minha experiência nos últimos anos foi que:
O Windows e o macOS dizem "oh, vamos consertar isso para você" e, em seguida, provavelmente aumentam o tamanho da troca. Abrir, por exemplo, 30 guias do YouTube retarda as coisas por um tempo, mas geralmente ainda posso usar o cursor se quiser abortar o processo e, depois disso, o resto do sistema (não necessariamente o aplicativo incorreto) é praticamente tão responsivo como sempre .
O Ubuntu (21.04) diz "desculpe, você não pode interagir com o computador pelos próximos dez a trinta minutos". No mesmo hardware e no mesmo navegador, posso abrir 30 abas do YouTube e ver todo o sistema travar. Toda a memória e troca são usadas, e o cursor não é apenas lento, mas travado no lugar. Não consigo interagir significativamente com o resto do sistema.
A diferença parece ser que o Ubuntu nunca resolve a situação, mantém seu tamanho de troca constante e, consequentemente, continua travando a cada cinco segundos, para sempre. Até que ocorra uma falha catastrófica e o Firefox desapareça sem deixar rastro – algo que praticamente nunca acontece em outros sistemas operacionais. O aspecto mais crucial é que não consigo interagir com o resto do sistema.
Não sei, mas tenho a impressão de que isso não seria um problema se o tamanho da troca fosse aumentado com base na demanda. Como isso é feito? Existe um melhor gerenciamento de memória a ser obtido de alguma forma?
Atualização de teste
Após (não tão rápido) fazer o teste rápido sugerido nos comentários onde dobrei o tamanho do swapfile posso concluir que faz toda a diferença do mundo. O sistema permaneceu responsivo durante toda a mesma carga. Só posso concluir que um tamanho de troca adaptável aliviaria o problema descrito.
$ free -h
total used free shared buff/cache available
Mem: 3.7Gi 3.1Gi 129Mi 374Mi 566Mi 105Mi
Swap: 4.0Gi 3.0Gi 988Mi
$ sysctl vm.swappiness
vm.swappiness = 60
$ swapon -s
Filename Type Size Used Priority
/swapfile_4G.img file 4194300 3180664 20
Uma nota sobre hardware
Um dos pontos de venda do Ubuntu (entre outros) é obter suporte contínuo e aumentar a vida útil do hardware mais antigo, que inclui máquinas com memória total inferior à média. Não absurdamente pouca memória, como demonstrado pelo fato de que outros sistemas operacionais podem fazer muito bem, apenas menos do que a média. Muitas dessas máquinas não são atualizáveis.
4 GB de RAM funciona bem para a maioria dos casos de uso . No Ubuntu, no Windows, no macOS. O que parece funcionar bem no Windows e no macOS, no entanto, é quando você usa todo o espaço de troca alocado.
Em suma, no mesmo instante em que a solução para fazer o Ubuntu rodar decentemente se torna "comprar novo hardware", todo o objetivo de executá-lo se torna discutível para todas essas máquinas. A atualização do hardware está fora do escopo desta questão.
Os requisitos para a edição padrão do Ubuntu são 4 GB de memória.
O kernel do Linux é... duvidoso em termos de suporte a swap. Swap é um cidadão de segunda classe, do ponto de vista de muitos desenvolvedores. O que quero dizer com isso é que o algoritmo usado para ejetar e buscar páginas é bastante simples e pode falhar quando há muitas páginas usadas com frequência.
Uma solução decente provavelmente seria usar zswap. O que isso faz é definir um pedaço de memória para ser memória compactada, para a qual as páginas são ejetadas. Para fazer isso, edite os parâmetros de inicialização do kernel para adicionar arquivos
zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
. A maneira mais fácil de fazer isso em um sistema Ubuntu é adicioná-lo ao/etc/default/grub
arquivo, como parte daGRUB_CMDLINE_LINUX_DEFAULT
chave. Isso aumentará efetivamente a quantidade de dados que podem ser armazenados na RAM, reduzindo a E/S do disco e evitando travamentos.Por fim, você pergunta sobre ter mais espaço de troca criado dinamicamente. O Linux é totalmente capaz de adicionar e remover arquivos de troca à vontade, o que significa que um script pode verificar a disponibilidade de troca e adicionar arquivos de troca, se necessário. No entanto, não há muito sentido para isso se você estiver usando o espaço de troca completo com muita frequência.
Para aumentar o espaço de troca (sem reparticionar seu disco), você pode usar um arquivo de troca. Para fazer isso, execute
sudo dd if=/dev/zero of=/swapfile count=1M bs=1024 status=progress
, que copia 1 milhão de blocos de 1024 bytes (ou seja, 1 gigabyte) em um arquivo. Em seguida, executesudo chmod 0600 /swapfile
esudo mkswap /swapfile
prepare o arquivo para uso como swap. Adicione-o ao /etc/fstab para tê-lo sempre disponível, anexando a seguinte linha a esse arquivo:/swapfile swap swap defaults 0 0
. Para finalizar o processo, chamesudo swapon -a
, que ativa o swapfile.Fonte: eu mesmo uso swapfiles e zswap e referi meu bash_histroy e o wiki do Arch para os comandos.
Como foi mencionado em um comentário do @Terrance Swapspace é uma solução para esse problema.
Agora, tudo o que você precisa para manter o controle do seu sistema é um pouco de armazenamento gratuito. Testado e funciona .