Estou usando o Linux 4.15, e isso acontece comigo muitas vezes quando o uso de RAM atinge o máximo - Todo o sistema operacional fica sem resposta, congelado e inútil. A única coisa que vejo funcionando é o disco (partição principal do sistema), que está em uso massivo.
Não sei se esse problema é específico do sistema operacional, específico do hardware ou específico da configuração.
Alguma ideia?
A alocação excessiva da RAM disponível, o que causa uma grande quantidade de trocas, pode definitivamente fazer isso. Lembre-se de que a E/S de acesso aleatório em seu HDD mecânico requer a movimentação de um cabeçote de leitura/gravação, que só pode fazer cerca de 100 buscas por segundo.
É comum que o Linux saia totalmente para almoçar, se você comprometer demais a RAM. Eu também tenho um disco giratório e 8 GB de RAM. Eu tive problemas com alguns softwares com vazamentos de memória. Ou seja, seu uso de memória continua crescendo ao longo do tempo e nunca diminui, então a única maneira de controlá-lo seria parar o software e reiniciá-lo. Com base nas experiências que tive durante isso, não estou muito surpreso em ouvir atrasos superiores a dez minutos, se você estiver gerando mais de 3 GB de troca.
Você não verá necessariamente isso em todos os casos em que tiver mais de 3 GB de troca. A teoria diz que o conceito-chave é thrashing . Por outro lado, se você estiver tentando alternar entre dois conjuntos de trabalho diferentes e exigir a troca de 3 GB de entrada e saída, a 100 MB/s levará pelo menos 60 segundos, mesmo que o padrão de E/S possa ser perfeitamente otimizado. Na prática, o padrão de E/S estará longe de ser o ideal.
Após a dificuldade que tive com isso, reformatei meu espaço de troca para 2 GB (várias vezes menor do que antes), para que o sistema não pudesse trocar tão profundamente. Você pode fazer isso mesmo sem mexer em redimensionamento da partição, porque
mkswap
leva um parâmetro de tamanho opcional.O equilíbrio aproximado é entre ficar sem memória e ter processos mortos, e ter o sistema travado por tanto tempo que você desiste e reinicializa de qualquer maneira. Não sei se uma partição swap de 4 GB é muito grande; pode depender do que você está fazendo. O importante é observar quando o disco começa a girar, verificar o uso da memória e responder de acordo.
É difícil verificar o uso de memória de aplicativos de vários processos. Para ver o uso de memória por processo sem contar a memória compartilhada dupla, você pode usar
sudo atop -R
, pressionar Me m, e procurar na coluna PSIZE. Você também pode usarsmem
.smem -t -P firefox
mostrará o PSS de todos os seus processos do Firefox, seguido por uma linha com o PSS total. Esta é a abordagem correta para medir o uso total de memória de navegadores baseados no Firefox ou Chrome. (Embora também existam recursos específicos do navegador para mostrar o uso de memória, que mostrará guias individuais).Você não vai gostar disso, mas acho que bloatware é o seu problema (embora eu não tenha certeza se é memória ou disco que é o problema). Infelizmente, o kernel do Linux é péssimo para lidar com situações de alta pressão de memória e é conhecido por basicamente exigir uma reinicialização quando a memória estiver esgotada. Há três coisas que me levam a acreditar que seu problema é o esgotamento de recursos:
Basicamente, coloque esses três juntos e seu sistema não terá recursos suficientes disponíveis para fazer muita coisa. Quanto a é lamentável o quão mal o Linux lida com situações de pouca memória (em comparação com, digamos, o kernel NT no Windows), mas parece ser assim. Você pode encontrar mais discussões neste tópico do Reddit e sua lista de discussão vinculada.
Quanto a como corrigir sua situação, eu diria que aumentar o tamanho do swap é uma boa ideia, mas como você está com pouco espaço em disco, isso será um problema. A menos que seu servidor Minecraft tenha muitas pessoas, acho que seria seguro reduzir sua memória para algo em torno de 1024m (eu pessoalmente uso 1024m com cerca de 10 pessoas e funciona bem). Eu também usaria torneira ou papel para o seu servidor Minecraft, pois eles tendem a ter mais desempenho.
Boa sorte!
Qual é a saída de
free -m
? A quantidade de RAM que você tem é inútil se não soubermos quanto você está usando. Isso e estou interessado em saber quanto espaço de troca está sendo usado.Eu acho que você respondeu sua própria pergunta, no entanto. Abrir "muitas guias" abertas em seu navegador pode definitivamente deixar seu sistema mais lento se você nunca as fechar, pois elas continuarão consumindo memória independentemente; quando seu sistema congela, quantos você tem aberto ao mesmo tempo?
Também faz sentido se o seu sistema estiver congelando de outras tarefas com uso intensivo de memória, como "gerar um gráfico muito grande a partir de um diagrama UML muito complexo". Isso deixará seu sistema absolutamente lento à medida que gera o gráfico, então isso dificilmente é uma surpresa.
Realmente parece que é assim que seu sistema deve se comportar. Ou isso ou estou perdendo alguma coisa aqui.
A propósito, as estatísticas do HDD não importam quando se trata de seu sistema parar de responder, pois a falta de memória é quase sempre a culpada.
Sua saída htop mostra que sua necessidade de RAM é maior que sua capacidade (total de RAM + SWAP). Portanto, a primeira consideração óbvia a ser feita é reduzir o uso da RAM ou aumentar a disponibilidade da RAM.
Observe que as versões modernas do Firefox são extremamente exigentes em recursos, devido à maneira como as janelas/guias recebem processo e espaço de memória. A idéia era evitar que as abas travassem deixando todo o navegador de joelhos. Vale o preço? Quem pode dizer... De qualquer forma, eu tive um problema semelhante devido ao acima, já que minha placa-mãe Pentium 4 suporta apenas 2 GB de RAM. Para evitar possíveis falhas de memória esgotada, adicionei ~800M de espaço de troca em um SSD sobressalente, obviamente com a intenção de usá-lo o mínimo possível. Consegui isso alterando uma configuração conhecida como swappiness, que determina o quão ansioso o kernel está para trocar as páginas de memória. Alguns comandos úteis a seguir.
Verifique a troca atual:
cat /proc/sys/vm/swappiness
Isso pode fornecer um resultado em torno de 60, o que é bastante alto para desempenho máximo em sistemas com carga menor. Para você, obviamente, isso funciona contraproducente, então você pode alterar a configuração usando um comando como
sysctl vm.swappiness=1
alterar a configuração enquanto o sistema está em execução.Para salvar essas alterações, você terá que procurar o arquivo
/etc/sysctl.conf
. Nesse arquivo, altere o valor ou adicione a linhavm.swappiness=1
.Lembre-se, isso não é uma solução no seu caso, mas deve ser uma solução útil.
Créditos https://askubuntu.com/questions/103915/how-do-i-configure-swappiness
fonte para a resposta acima, inclui mais explicações. Achei esse post muito útil no meu caso.
Quando li o título, meu pensamento imediato foi "RAM insuficiente", porque eu mesmo experimentei exatamente esse problema no Linux, mais de 10 minutos de disco frenético depois de abrir muitas guias do navegador. Concordo, é triste e precisa de melhorias. O Windows lida com essa situação muito melhor.
Algumas sugestões:
No entanto, a única solução verdadeira é comprar mais RAM.
Não apenas uma abundância de RAM evitará que essa catástrofe ocorra, mas também permitirá que o sistema construa um grande cache de arquivos na RAM, o que seu sistema atualmente não pode fazer porque está muito próximo do limite. Um cache de arquivo grande tirará o trabalho do HDD e fará com que quase todas as ações no sistema pareçam mais rápidas em geral. Vale a pena.
Uma excelente discussão de como o problema é causado, continua e cresce. Gosto de me antecipar a problemas como os que você enfrenta jogando hardware no design inicial do computador e/ou atualizando uma implementação existente. Você pode,
adicione RAM (32 GB funciona muito bem para muitas configurações)
substitua sua unidade de disco rígido por um SSD
adicione um SSD (Solid State Drive) para unidade de troca
crie uma partição swap na RAM (com 32 ou mais GB de RAM)
obter um HDD mais rápido
mude para um sistema com processamento mais rápido e arquitetura de barramento mais ampla/rápida.
Algumas dessas atualizações/substituições de hardware podem custar bem menos de US$ 100. Eles não são específicos do Linux, nem de suas implementações exatas de software, mas o hardware que você está usando não parece adequado às suas tarefas.
Normalmente é "apenas" o X11 que se torna inutilizável. Para obter um pressionamento de tecla do seu teclado para um programa, e fazer com que ele mostre qualquer coisa na tela, o código em vários processos diferentes deve ser executado. (Servidor X para obter o pressionamento de tecla do kernel, xterm ou equivalente para obter o evento e decidir desenhar algo, então envie uma mensagem ao servidor X para desenhar um glifo de uma fonte.)
Basta passar o mouse sobre uma janela com um navegador da Web mostrando uma página com um monte de porcaria de Javascript pode resultar em um monte de mensagens para vários processos, os quais fazem com que esses processos acordem e toquem em um monte de dados. Presumivelmente incluindo um monte de bitmaps não compactados "em cache". Portanto, é altamente provável que isso despeje mais coisas que serão necessárias em breve.
ctrl+alt+F2 para alternar para outro console virtual geralmente torna possível fazer login e executar comandos shell com apenas alguns segundos de latência quando algo está causando thrashing de swap. É apenas
bash
; o kernel do Linux não é trocável e tem todo ocódigo VT e teclado<->TTY.
Pode levar algum tempo até que este pressionamento de tecla faça alguma coisa, se a troca estiver realmente se debatendo muito. O servidor X, não o kernel, precisa receber esse pressionamento de tecla e sair de seu próprio VT depois de colocar o hardware de vídeo de volta no modo correto . O kernel ainda está procurando por combinações de teclas Alt+SysRq, mas nada mais. Mas quando você muda para um console de texto, geralmente há no máximo 1 processo de espaço de usuário entre a digitação e os caracteres exibidos na tela.
Se o seu servidor X realmente estiver travado, ctrl+alt+F2 pode não funcionar.
Para evitar a desaceleração quando você não está realmente batendo, reduzir a "troca" pode ajudar. por exemplo, eu configurei o ajuste
/proc/sys/vm/swappiness
no6
meu desktop com 16 GB de RAM e uma partição de troca de 2 GB em um SSD NVMe. Você pode ler mais sobre como ajustar a latência interativa (em oposição à taxa de transferência do servidor); qualquer guia mencionará esse ajuste.Mas se você tiver alguma troca, o Linux a usará antes de invocar o assassino OOM. Mantenha sua partição swap pequena , grande o suficiente para que o Linux salve porcarias realmente obsoletas que normalmente não são usadas por muito tempo. (por exemplo, vazamentos de memória!)
Eu não tive nenhum problema com swap estar cheio. O Linux moderno lida bem com o espaço de troca limitado. O Chromium (que eu uso em vez do firefox) às vezes fica mais lento com dezenas de guias do Stack Overflow abertas, mas o The Great Suspender é um bom complemento para descarregar guias quando você não as está usando. Acho que isso economiza RAM significativa para mim, embora só descarregue as guias onde você não digitou nada em uma caixa de texto. Também pode estar disponível para o Firefox.
Como outros sugeriram, 16 GB de RAM é muito bom para uso interativo com o Linux. Os preços da DRAM são relativamente baixos atualmente ; depois de um pico de cerca de 1,5 anos atrás, eles diminuíram novamente.
Você não está usando o Linux direito. O que se torna especialmente perceptível em uma máquina com recursos limitados. Você não precisa de mais RAM, nem de um processador mais rápido.
Fundo:
Para 'corrigir' seu problema:
Deixe os programas não-usuários em paz, mas comece a alterar as prioridades (níveis agradáveis) de seus programas de usuários para que eles não causem problemas. Edite o que inicia seus programas para incluir níveis agradáveis, indo de geralmente não um problema, ao pior ofensor.
Exemplos do mundo real:
Seu WorstOffender ainda ficará sem resposta por alguns minutos, isso é literalmente um problema de compra de uma caixa melhor, mas agora não fará com que todo o seu sistema operacional (Linux) e tudo o que você está executando também pare de responder.