Czy można utworzyć plik wymiany dla maszyny wirtualnej gościa z systemem Linux zarządzanej przez Vagrant?

8

W moim Vagrantfilezdefiniowałem następujący dostawca:

Fragment pliku Vagrantfile:

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

Po free -muruchomieniu w utworzonej maszynie wirtualnej widzę następujący raport:

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

Czy można przypisać swapiness podczas budowania i udostępniania maszyny wirtualnej?

Próbowałem ustawienie vm.swappinessw /etc/sysctl.confi ponownym uruchomieniu maszyny wirtualnej, ale nie widzę żadnego wpływu dodawania przestrzeń wymiany na VM.

Dlaczego potrzebuję przestrzeni wymiany? Wolałbym wcale nie zajmować się przestrzenią wymiany i uruchamiać wszystko w pamięci. Jednak w przypadku niektórych aplikacji (na przykład projekt kompozytora dla PHP) znane są z używania dużej ilości pamięci w określonych warunkach. Bez przestrzeni wymiany muszę być bardzo liberalny z ilością pamięci, którą rzucam na maszynę wirtualną, gdybym miał przestrzeń wymiany - chociaż może nie być tak wydajna - teoretycznie napotkałbym mniej problemów.

Sean Quinn
źródło

Odpowiedzi:

4

Widoczne ustawienie pamięci służy wyłącznie do konfigurowania pamięci RAM maszyny wirtualnej. Jednak definicja przestrzeni wymiany jest częścią obrazu dysku. Ten obraz jest dostarczany jako część config.vm.boxdefinicji w Vagrantfile. W moim konkretnym przypadku zauważyłem, że nie można łatwo zmienić przestrzeni wymiany (mam tylko 1 GB wymiany).

W twoim przypadku polecam zmienić obraz podstawowy ( config.vm.box) lub dodać plik wymiany do głównego systemu plików, integrując na przykład ten skrypt ze swoim Vagrantfile. To kolejny link, który wydaje się warty wypróbowania.

C-Otto
źródło
Dzięki, doszedłem do wniosku, że obraz bazowy musiał zostać zmodyfikowany po tym, jak zajrzałem dalej. Jak się okazuje, mogę obejść moje problemy, używając różnych operacji w programie, które wymagają dużo pamięci. Nie wydaje się, aby istniało inne rozwiązanie niż modyfikowanie obrazu podstawowego.
Sean Quinn
Połączony skrypt (pierwszy) działał dla mnie dobrze. W przypadku gdy link kiedykolwiek się zestarzeje: create_swap.sh i remove_swap.sh jako nieprzetworzone informacje
panepeter
12

Po prostu dodaj tę linię do pliku włóczęgi

Vagrantfile

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

A potem poprawka

vagrant up --provision

Jak to działa

Jest to demon dynamicznej przestrzeni wymiany. Istnieje kilka, ale tutaj jest popularny.

sudo apt install swapspace

Aby sprawdzić, czy działa

sudo service swapspace status

Fragment http://pqxx.org/development/swapspace/

Ten demon systemowy dla jądra Linux ma na celu wyeliminowanie potrzeby dużych, stałych partycji wymiany lub plików wymiany.

Podczas instalowania systemu opartego na Linuksie (niezmiennie GNU / Linux) z Swapspace, zwykłą partycję wymiany można pominąć lub może być dość mała. Ilekroć Swapspace stwierdzi podczas normalnego użytkowania systemu, że potrzeba więcej pamięci wirtualnej, automatycznie zajmie miejsce na dysku twardym. I odwrotnie, przestrzeń wymiany, która nie jest już potrzebna, jest ponownie zwalniana do regularnego wykorzystania przez system plików.

Oznacza to, że przy zainstalowanym programie Swapspace zmiana wielkości dostępnej przestrzeni wymiany systemu podczas instalacji nie jest już wyborem na śmierć lub życie. Teraz praktyczne staje się uruchamianie GNU / Linuksa z pojedynczej, dużej partycji - bez utraty miejsca na dysku na godne pożałowania opcje instalacji. System powinien także być w stanie obsłużyć sporadyczne zadania wymagające dużej ilości pamięci, które zajmują znacznie więcej miejsca wymiany niż pierwotnie przewidywano, bez pozostawiania tej samej przestrzeni wymiany nieużywanej i nieużywanej podczas normalnej pracy, jak to zwykle bywa.

Jonathan
źródło
0

Jeśli używasz szefa kuchni do zaopatrzenia swojej skrzynki Vagrant, najłatwiejszym rozwiązaniem jest prawdopodobnie skorzystanie z tego swap_filezasobu. Ten zasób jest nowy w wersji Chef 14.0.

Na przykład dodaj do swojego przepisu:

swap_file '/var/swap.1' do
  size 1024
end
Cédric
źródło