È possibile creare un file di scambio per una VM guest Linux gestita da Vagrant?


8

Nel mio Vagrantfileho il seguente provider definito:

Estratto da Vagrantfile:

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

Quando corro free -mnella VM creata vedo il seguente rapporto:

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

È possibile assegnare lo swappiness durante la creazione e il provisioning della VM?

Ho provato a fissare vm.swappinessin /etc/sysctl.confe riavviato il VM, ma non vedo alcun effetto di aggiungere spazio di swap alla VM.

Perché ho bisogno di spazio di scambio? Preferirei non occuparmi affatto dello spazio di swap ed eseguire tutto in memoria. Tuttavia, per alcune applicazioni (ad esempio il progetto del compositore per PHP) sono note per l'utilizzo di molta memoria in determinate condizioni. Senza lo spazio di swap devo essere molto liberale con la quantità di memoria che lancio in una VM, se avessi lo spazio di swap - anche se potrebbe non essere altrettanto efficiente - teoricamente incorrerei in un minor numero di problemi.

Risposte:


4

L'impostazione di memoria visualizzata viene utilizzata solo per configurare la RAM della VM. Tuttavia, la definizione dello spazio di scambio fa parte dell'immagine del disco. Questa immagine ti viene fornita come parte della config.vm.boxdefinizione in Vagrantfile. Nel mio caso specifico ho notato che lo spazio di swap non può essere facilmente riconfigurato (ho solo 1 GByte di swap).

Nel tuo caso, ti consiglio di cambiare l'immagine di base ( config.vm.box) o aggiungere un file di scambio al tuo file system di root integrando ad esempio questo script nel tuo Vagrantfile. Questo è un altro link che sembra degno di essere provato.


Grazie, ho immaginato che l'immagine di base dovesse essere modificata dopo aver esaminato ulteriormente. A quanto pare posso aggirare i miei problemi utilizzando diverse operazioni sul programma che richiedono molta memoria. Non sembra che ci sia un'altra soluzione oltre a modificare l'immagine di base.
Sean Quinn,

La sceneggiatura collegata (la prima) ha funzionato bene per me. Nel caso in cui il link diventi stantio: create_swap.sh e remove_swap.sh come raw
gist

12

Aggiungi semplicemente questa linea al tuo file vagabondo

Vagrantfile

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

E poi riprovision

vagrant up --provision

Come funziona

Questo è un demone dello spazio di scambio dinamico. Ce ne sono diversi, ma qui è popolare.

sudo apt install swapspace

Per verificare che sia in esecuzione

sudo service swapspace status

Estratto da http://pqxx.org/development/swapspace/

Questo demone di sistema per il kernel Linux mira a eliminare la necessità di partizioni di swap di grandi dimensioni o file di scambio fissi.

Quando si installa un sistema basato su Linux (invariabilmente GNU / Linux) con Swapspace, la solita partizione di swap può essere omessa o può essere mantenuta piuttosto piccola. Ogni volta che Swapspace rileva durante l'uso normale del sistema che è necessaria più memoria virtuale, rivendica automaticamente lo spazio dal disco rigido. Al contrario, lo spazio di scambio non più necessario viene nuovamente liberato per un uso regolare da parte del filesystem.

Ciò significa che con Swapspace installato, dimensionare lo spazio di swap disponibile del sistema durante l'installazione non è più una scelta a vita o morte. Ora diventa pratico eseguire GNU / Linux su una sola, grande partizione - senza spazio su disco perso per scelte di installazione spiacevoli. Il sistema dovrebbe anche essere in grado di gestire l'attività occasionale ad alta intensità di memoria che occupa molto più spazio di swap di quanto inizialmente previsto, senza lasciare lo stesso spazio di swap inutilizzato e inutilizzabile durante il normale funzionamento come avviene normalmente.


0

Se si utilizza Chef per eseguire il provisioning della casella Vagrant, la soluzione più semplice è probabilmente quella di utilizzare la swap_filerisorsa. Questa risorsa è nuova in Chef 14.0.

Ad esempio, aggiungi quanto segue alla tua ricetta:

swap_file '/var/swap.1' do
  size 1024
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.