É possível criar um arquivo de troca para uma VM convidada do Linux gerenciada pelo Vagrant?

8

No meu Vagrantfileeu tenho o seguinte provedor definido:

Trecho do Vagrantfile:

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  vb.customize ["modifyvm", :id, "--memory", "4096"]
end

Quando eu executo free -mna VM criada, vejo o seguinte relatório:

             total       used       free     shared    buffers     cached
Mem:          3953        337       3615          0         18        119
-/+ buffers/cache:        199       3753
Swap:            0          0          0

É possível atribuir swappiness quando a VM está sendo criada e provisionada?

Eu tentei configuração vm.swappinessno /etc/sysctl.confe reiniciar o VM, mas eu não vejo qualquer efeito da adição de espaço de troca para a VM.

Por que preciso de espaço de troca? Prefiro não lidar com o espaço de troca e executar tudo na memória. No entanto, para alguns aplicativos (o projeto do compositor para PHP, por exemplo) são famosos por usar muita memória sob certas condições. Sem espaço de troca, eu tenho que ser muito liberal com a quantidade de memória que lancei em uma VM, se eu tivesse espaço de troca - embora possa não ser tão eficiente -, teoricamente teria menos problemas.

Sean Quinn
fonte

Respostas:

4

A configuração de memória que você vê é usada apenas para configurar a RAM da VM. No entanto, a definição do espaço de troca faz parte da imagem do disco. Esta imagem é fornecida a você como parte da config.vm.boxdefinição em Vagrantfile. No meu caso específico, notei que o espaço de troca não pode ser facilmente reconfigurado (eu só tenho 1 GByte de troca).

No seu caso, recomendo alterar a imagem base ( config.vm.box) ou adicionar um arquivo de troca ao seu sistema de arquivos raiz, integrando, por exemplo, este script ao seu Vagrantfile. Este é outro link que parece valer a pena experimentar.

C-Otto
fonte
Obrigado, eu meio que percebi que a imagem base tinha que ter sua troca modificada depois que eu olhei mais detalhadamente. Acontece que posso solucionar meus problemas usando operações diferentes no programa que exigem muita memória. Parece que não há outra solução além de modificar a imagem base.
Sean Quinn
O script vinculado (primeiro) funcionou muito bem para mim. Caso o link fique obsoleto: create_swap.sh e remove_swap.sh como essência bruta
panepeter
11

Basta adicionar esta linha ao seu arquivo vagrant

Vagrantfile

 # Enable Dynamic Swap Space to prevent Out of Memory crashes
config.vm.provision "shell", inline: "sudo apt install swapspace -y"

E então reprovisionar

vagrant up --provision

Como funciona

Este é um daemon de espaço de troca dinâmico. Existem vários, mas aqui está um popular.

sudo apt install swapspace

Para verificar se está em execução

sudo service swapspace status

Trecho de http://pqxx.org/development/swapspace/

Esse daemon do sistema para o kernel Linux visa eliminar a necessidade de partições de swap fixas grandes ou arquivos de swap.

Ao instalar um sistema baseado em Linux (invariavelmente GNU / Linux) com Swapspace, a partição de troca usual pode ser omitida ou mantida muito pequena. Sempre que o Swapspace encontrar, durante o uso normal do sistema, que é necessária mais memória virtual, ele automaticamente reivindicará espaço no disco rígido. Por outro lado, o espaço de troca que não é mais necessário é liberado novamente para uso regular pelo sistema de arquivos.

Isso significa que, com o Swapspace instalado, o dimensionamento do espaço de troca disponível do sistema durante a instalação não é mais uma opção de vida ou morte. Agora se torna prático executar o GNU / Linux apenas em uma única e grande partição - sem espaço em disco perdido para lamentáveis ​​opções de instalação. O sistema também deve ser capaz de lidar com as tarefas ocasionais que exigem muita memória, que ocupam muito mais espaço de troca do que o inicialmente previsto, sem deixar o mesmo espaço de troca sem uso e sem uso durante a operação normal, como normalmente é o caso.

Jonathan
fonte
0

Se você estiver usando o Chef para provisionar sua caixa do Vagrant, a solução mais fácil é provavelmente usar o swap_filerecurso. Este recurso é novo no Chef 14.0.

Por exemplo, adicione o seguinte à sua receita:

swap_file '/var/swap.1' do
  size 1024
end
Cédric
fonte