Kilka dni temu na moją skrzynkę przyszła wiadomość o potencjalnie złowrogim tytule „Nowe warunki współpracy – Propozycja” z HitMe.pl, gdzie mam od dawna swój podstawowy serwer (na którym działa m.in. Webinsider.pl). Potencjalnie złowroga, bo jakoś tak jest, że jak już przychodzą tego typu wiadomości, to zazwyczaj oznacza to np. wyłączenie bezpłatnego pakietu G Suite. Na szczęście tym razem była to wiadomość z propozycją zmiany aktualnie używanego serwera na coś nowszego (z aktualnej oferty).

Pamięć typu swap w systemie Debian

Minęło kilka dni, serwer już stoi i czeka na dokończenie konfiguracji (oraz migrację stron i usług), ale przy tej okazji pomyślałem, że jeszcze nie pisałem – przynajmniej w kontekście serwera VPS – o przygotowaniu „pliku/partycji wymiany”, czyli pliku swap, z którego system korzysta, gdy potrzeba więcej pamięci RAM, niż jest faktycznie (w uproszczeniu).

A jest to jedna z tych rzeczy, którą wykonuje właściwie na początku, gdy tylko zaczynam pracować nad jakimś serwerem. Nawet jeśli serwer VPS w standardzie ma skonfigurowaną pamięć swap (np. na dedykowanej do tego partycji), to często jej wielkość jest zbyt skromna.

Zaczynamy od sprawdzenia, czy w systemie w ogóle jest jakaś pamięć swap. Można to zrobić za pomocą jednego z 2 poleceń:

sudo swapon --show
free -h

Jeśli jest, to w odpowiedzi zobaczymy informacje o wielkości pamięci swap:

Na powyższym przykładzie widać, że pamięć swap to 6 GB, i składa się z 2 elementów:

  • Pliku /swapfile o wielkości 5 GB
  • Partycji /dev/vda2 o wielkości 1 GB

W przypadku tego serwera w standardzie była druga opcja (partycja 1 GB), do której dołożyłem plik swapfile 5 GB.

By stworzyć taki plik, możemy w systemie Debian (i Ubuntu, bo akurat na tych dystrybucjach pracuję) skorzystać z polecenia:

sudo fallocate -l 5G /swapfile

Co spowoduje utworzenie pliku /swapfile o wielkości 5 GB (można utworzyć większy bądź mniejszy, zależnie od potrzeb, raczej w granicach wielkości fizycznej pamięci RAM).

Następny krok to modyfikacja uprawnień:

sudo chmod 600 /swapfile

Oraz odpowiednie sformatowanie pliku i jego aktywacja:

sudo mkswap /swapfile
sudo swapon /swapfile

W tym momencie można już za pomocą poleceń podanych na samym początku, podejrzeć jak wygląda pamięć RAM w systemie, w tym również pamięć swap.

Automatyczne montowanie pamięci swap

Kolejny krok, to ustawienie automatycznego montowania przygotowanej pamięci podczas uruchamiania systemu. W tym celu edytujemy plik /etc/fstab:

sudo nano /etc/fstab

I dodajmy linijkę:

/swapfile none swap nofail,sw 0 0

Takim elementem odbiegającym od standardu jest tutaj „nofail”, ale dzięki czemu, gdyby coś było nie tak z plikiem (albo dyskiem, jeśli dodamy go do wpisów związanych z montowanie dysków), to system i tak wystartuje, bez próby jego naprawy, czy – co gorsze – oczekiwania na naszą akcję.

Swappiness, czyli dostosowanie (z)użycia pamięci wirtualnej

Ostatni krok, to zmiana ustawień parametru swappiness ze standardowych 60 na 10. Standardowa opcja ponoć ma sens np. na komputerach do pracy (używam Windowsa do tego celu, więc… ;-)), ewentualnie w przypadku serwerów z bardzo mało ilością pamięci RAM. W przypadku standardowego serwera – zwłaszcza gdy ma więcej pamięci RAM – lepiej, jak jednak jak system traktuje pamięć swap jako ostateczność, stąd zazwyczaj zmienia się ten parametr na 10.

By dokonać takiej zmiany na stałe, a nie tylko tymczasowo, do restartu serwera, przechodzimy do edycji pliku /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

I dodajmy w nim linijkę:

vm.swappiness=10

Następnie korzystamy z polecenia, które wczyta zmianę bez potrzeby restartowania serwera:

sudo sysctl -p

I to wszystko, od tego momentu w systemie nie tylko mamy wybranej wielkości pamięć swap (uzupełnienie pamięci RAM), ale też system wykorzystuje ją w określony sposób, czyli głównie wtedy, gdy faktycznie potrzeba.

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!