Dicas sobre como usar o Linux sem partição swap

3

No passado, fiquei um pouco farto das condições de falta de memória no Linux, onde a memória virtual começa a trocar e monopolizar a atividade do disco, e a máquina fica mais lenta.

Então quando eu instalei o Ubuntu no meu MacBook Pro, notei que ele tinha 8 GB de memória, e eu disse a mim mesmo: "isso parece suficiente, eu acho que vou evitar problemas de troca e não reservar uma partição para virtual Eu preciso do espaço em disco de qualquer maneira. "

Bem, para minha surpresa, a experiência do usuário em condições de falta de memória com o Linux sem memória virtual é muito, muito pior do que eu esperava.

Se eu acidentalmente compilar muitos arquivos C ++ grandes de uma só vez (fácil fazer com "make -j6"), ou qualquer outra coisa que acidentalmente consuma a memória da máquina antes de eu notar, em vez daquele programa travar e dar um erro Como seria de esperar, o comportamento em vez disso é que toda a minha área de trabalho pára de responder e sou forçada a reinicializar o computador com força! Às vezes eu perco muito tempo ou trabalho devido a isso!

Eu consertaria isso voltando e particionando novamente para me dar alguma memória virtual, mas porra ... Eu não posso me dar ao luxo de fazer isso agora. Há alguma dica para fazer com que o Linux lide com as condições de falta de memória de maneira mais clara?

    
por Gilles 20.01.2017 / 18:55

2 respostas

8

I would fix it by going back and re-partitioning to give myself some virtual memory, but damn..

Você não precisa ter uma partição completa dedicada à troca, e você não precisa reparticionar novamente.

Criar swap como um arquivo é bem fácil. Basta criar um arquivo grande e vazio, executar o mkswap nele e adicionar a troca.

# create an big empty 1GB file (or whatever size you like)
dd if=/dev/zero of=/swapfile bs=1M count=1024
# format the file as swap
mkswap /swapfile
# turn it on.
swapon /swapfile

Se você quiser torná-lo permanente, adicione-o ao seu fstab

/swapfile swap swap defaults 0 0
    
por 20.01.2017 / 19:45
4

Quando eu faço compilações grandes (qtwebkit estou olhando para você) eu uso um grupo de controle para evitar a troca para a morte ou outros efeitos colaterais infelizes. Para minha caixa 6G eu faço isso:

cgcreate -g memory:emerge
echo "4G" > /sys/fs/cgroup/memory/emerge/memory.limit_in_bytes
echo "4G" > /sys/fs/cgroup/memory/emerge/memory.memsw.limit_in_bytes
cgexec -g memory:emerge tmux

Se uma condição OOM ocorrer, o único processo que será morto é a compilação.

    
por 20.01.2017 / 22:38