De +22,04 LTS

De +22,04 LTS

Às vezes trabalho com enormes despejos de dados que desejo manter na memória para processamento. Às vezes calculo mal a quantidade de memória que meu programa produzirá ou um depurador multiplica o uso de memória por um fator que excede minha memória disponível.

Sempre que inicio um processo que consome muita memória, isso é o que eu esperaria de um sistema operacional sensato: tentar consumir toda a memória livre e, em seguida, pedir gentilmente a alguns outros processos não essenciais que cedam alguma memória de que não precisam, então escreva para trocar.

Aqui está o que o Ubuntu faz por mim: consumir toda a memória livre, depois pedir ao sistema operacional para trocar todos os serviços essenciais (sessão do gnome, terminal, teclado), depois congelar e esperar que eu desconecte o plugue de alimentação.

Duas questões:

  1. Como um sistema operacional pode assumir que algo pode ser tão importante que não há problema em parar de ouvir a entrada do usuário?
  2. Como posso dizer ao Ubuntu para nunca trocar serviços essenciais e sempre reagir à entrada do usuário, mesmo que algum processo estúpido tente consumir mais recursos do que o sistema fornece.

Responder1

Ainda não tenho uma solução para o problema, mas posso oferecer duas soluções alternativas que podem ser do interesse de outras pessoas:

1)cedo

Esse é um serviço que monitora o uso da memória e elimina o processo que consome mais memória quando um determinado limite é atingido (veja tambémesseeessepergunta sobre o OOM killer no kernel do Linux)

Eu testei com um processo de demonstração que solicita memória indefinidamente em pequenos pedaços. Aqui está minha primeira impressão: quando inicio o processo não autorizado, ele consome rapidamente toda a minha RAM. Então a troca começa e o sistema deixa de responder. Alguns segundos depois, o sistema está online novamente. O log do earlyoom mostra que ele eliminou o processo de consumo de memória depois que o uso de memória e swap atingiu 90%.

Ainda existe um atraso irritante quando a troca começa e depois que o processo é encerrado, algumas partes de outros processos geralmente permanecem na troca até serem solicitadas, mas é um começo.

2) apenas desabilite a troca

Eu sei que isso é umtema polêmico, mas para fins de sistemas desktop e especialmente máquinas de desenvolvimento onde pode acontecer de tempos em tempos que um processo tente consumir toda a sua memória, faz sentido: sem troca, o assassino OOM funciona conforme o esperado. Quando você fica sem memória, ele encontra omelhor processo para matare se livra dele. Sem atraso, sem atraso.

Você pode desabilitar a troca para a sessão atual com sudo swapoff -aoutornar a mudança permanente.


A solução adequada para o problema seria, obviamente, que o sistema permanecesse responsivo quando a memória principal se esgotasse e começasse a trocar memória como se não houvesse amanhã, mas isso não parece acontecer tão cedo.

Responder2

De +22,04 LTS

Existe um serviço chamado systemd-oomd que monitorará automaticamente o uso da memória e tentará encerrar processos quando estiver sem memória e é instalado por padrão como parte do systemd. Para visualizar o status atual, digite oomctl. Exemplo de saída:

Dry Run: no
Swap Used Limit: 90.00%
Default Memory Pressure Limit: 60.00%
Default Memory Pressure Duration: 20s
System Context:
        Memory: Used: 4.1G Total: 15.5G
        Swap: Used: 1.0G Total: 3.9G
Swap Monitored CGroups:
        Path: /
                Swap Usage: (see System Context)
Memory Pressure Monitored CGroups:
        Path: /user.slice/user-1000.slice/[email protected]
                Memory Pressure Limit: 50.00%
                Pressure: Avg10: 0.00 Avg60: 0.02 Avg300: 0.00 Total: 9s
                Current Memory Usage: 3.9G
                Memory Min: 0B
                Memory Low: 0B
                Pgscan: 23663084
                Last Pgscan: 23663084

Por padrão, comece a recuperar com 90% de uso de memória e swap. Ele usa pressão de memória em grupos de controle de fatias de usuário (ou seja,[e-mail protegido]), que é onde a maioria dos aplicativos é gerada, mas não no grupo de controle system.slice, que gera os componentes mais cruciais do sistema, como NetworkManager e Gnome Display Manager. Resumindo, oomd liberará os processos do usuário antes dos do sistema. Para visualizar a configuração atual do systemd-oomd, digite:

systemd-analyze cat-config systemd/oomd.conf

Referir-seesta páginapara obter uma referência sobre o que eles fazem. Para editar os parâmetros OOM de uma unidade systemd específica, adicione ou edite as variáveis ​​especificadasaquino arquivo da unidade.

Responder3

Experimente uma de duas coisas:

1) altere a configuração de troca de sua configuração padrão de 60 para 10,ou seja: adicionarvm.swappiness = 10para /etc/sysctl.conf(no terminal, digite sudo gedit /etc/sysctl.conf) e reinicie o sistema. Pesquise aqui por swappiness para mais informações sobre isso.

2) Se a troca não ajudar... mesmo que você não queira... aumente o tamanho do seu arquivo de troca para 1,5x16G e veja se isso ajuda.

Mantenha-me informado. Felicidades, Al

informação relacionada