O Ubuntu congela quando os picos de uso de RAM

3

Eu tenho sido frequentemente incomodado no Ubuntu quando há um pico na RAM - por exemplo, ao iniciar o emulador do Android Studio ou quando uma guia do Chrome congela - toda a GUI congela e por isso sou forçado a esperar de volta ou vá para TTY e mate o culpado.

É possível que o Ubuntu gerencie a RAM de maneira muito diferente do que o Windows? No Windows, o aplicativo em si congela, mas não a GUI inteira. Existe uma maneira de fazer o Ubuntu se comportar mais como o Windows a esse respeito?

    
por Daniel 29.09.2016 / 00:41

2 respostas

3

Os sistemas operacionais modernos usam paging para gerenciar a memória. Ele dá algumas vantagens para o sistema, como poder usar mais memória do que você fisicamente, protegendo alguma área de memória sensível (como a memória reservada do kernel), entre outras coisas que eu posso apontar alguma referência para se você quiser aprender mais sobre paginação.

Mas o que é paginação?

Vou pular as técnicas e dar uma analogia. Imagine que você tem uma coleção de enciclopédias, de A a Z, e é uma pessoa curiosa que gosta de passar as tardes lendo-a. Você mantém todas as enciclopédias em sua estante e tem uma tabela de leitura na qual você pode ter 4 livros.

Um dia você está lendo sobre "Sailing", que está na enciclopédia da letra S. Em algum momento você pode precisar ler sobre algo relacionado, como "Winds" no livro da letra W. Contanto que você o tenha em sua mesa de leitura, você pode abri-lo rapidamente e ler o que precisa, depois voltar ao livro "Vela". O problema é que, uma vez que sua mesa de leitura só pode caber em 4 livros, as chances são altas de que você precisará de um livro que já não esteja lá. Então você precisaria levar um dos livros da mesa de volta para a prateleira, pegar o livro que você precisa na mesa de leitura e lê-lo.

Ok, o que toda essa história do livro tem a ver com meus congelamentos? Bem, o computador faz algo parecido o tempo todo. Para poder usar mais memória do que tem fisicamente, o computador divide a memória em páginas , que são pequenos blocos contínuos de memória. Aqueles não precisam estar na RAM (a "mesa de leitura") o tempo todo, eles podem ser armazenados no seu disco (a "prateleira de livros"). Se a RAM estiver cheia e a CPU precisar ler / gravar nas páginas armazenadas no disco, uma das páginas na RAM será armazenada no disco e a página solicitada será carregada na RAM.

Este é um trabalho do Kernel, portanto, é transparente para o usuário e para os programas. Mas como ler e gravar no disco é muito mais lento que ler e escrever na RAM, você notará que isso congela.

No Linux, existe uma partição chamada swap , que é usada para armazenar essas páginas extras. O Windows faz a mesma coisa, mas acho que usa um arquivo. O próprio kernel do sistema não irá congelar, já que ele estará em páginas bloqueadas ("não-swappáveis").

A imagem abaixo (de um artigo da wikipedia) ilustra o conceito de paginação (e memória virtual, que não precisamos entrar). Esses blocos representam as páginas alocadas na memória ou no disco.

AcreditoqueomotivopeloqualoLinuxtambémestácongelandoéporqueoUnity(GUIdaáreadetrabalho)podesofrerosatrasoscausadosporessatroca,enquantonoWindowselespodemmanterocódigoGUIdaáreadetrabalhobloqueado("não-trocável" ") Páginas. Esta é apenas uma teoria de brainstorm embora.

    
por IanC 29.09.2016 / 12:07
1

Eu tive problemas semelhantes no passado. Eu mudei o swappiness do Ubuntu para fazer com que o sistema operacional gravasse RAM para HD muito mais tarde.

Leia uma resposta para trocar o swappiness aqui: Como eu configuro o swappiness?

Não posso garantir que isso ajude a resolver seu problema, mas, na minha opinião, é a melhor aposta.

    
por mondjunge 29.09.2016 / 11:35