Wysoki Load po restarcie VPS

Czas czytania: 2 minuty

Konfigurując jakiś czas temu niewielki serwer VPS na potrzeby poczty zauważyłem, że po jego restarcie tzw. Load rośnie do ponad 20 co oczywiście skutkuje przyblokowaniem innych usług działających na serwerze. Stan ten utrzymuje się około 20min, po czym Load zaczyna spadać do normalnych wartości.

Analizując problem okazało się, że odpowiedzialny za to jest Clamav, więc aby go rozwiązać trzeba jakoś ograniczyć apetyt Clamav na zasoby tak, aby nie blokował poprawnego funkcjonowania innych usług na serwerze. Jak to zrobić? np. w poniższy sposób.

otwórz plik /etc/systemd/system/clamav-daemon.service.d/extend.conf

I na samym końcu w [service] dodaj

IOSchedulingPriority = 7
CPUSchedulingPolicy = 5
MemoryLimit=256M
CPUQuota=20%
Nice = 19

IOSchedulingPriority = 7

Ustawia priorytet harmonogramowania wejścia/wyjścia (I/O) dla procesu. Wartość 7 oznacza niski priorytet I/O. Priorytet I/O może mieć wartości od 0 (najwyższy priorytet) do 7 (najniższy priorytet).

Ustawienie niskiego priorytetu może być użyteczne, gdy chcemy, aby proces korzystał z zasobów I/O tylko wtedy, gdy są one dostępne, nie wpływając znacząco na inne procesy.

CPUSchedulingPolicy = 5

Ustawia politykę harmonogramowania procesora dla procesu.

Wartość 5 zazwyczaj odnosi się do polityki SCHED_IDLE. SCHED_IDLE oznacza, że proces ma najniższy priorytet wśród wszystkich procesów i będzie wykonywany tylko wtedy, gdy system nie jest zajęty żadnymi innymi zadaniami.

MemoryLimit = 256M

Ustawia limit pamięci RAM, którą proces może wykorzystać. 256M oznacza, że proces nie może zużywać więcej niż 256 megabajtów pamięci.

Jest to użyteczne do kontroli zasobów i zapobiegania nadmiernemu wykorzystaniu pamięci przez jeden proces.

CPUQuota = 20%

Ustawia limit użycia CPU dla procesu. 20% oznacza, że proces może używać maksymalnie 20% czasu procesora.

Jest to przydatne w sytuacjach, gdy chcemy zagwarantować, że proces nie będzie zużywał nadmiernych zasobów procesora i nie wpłynie negatywnie na wydajność systemu.

Nice = 19

Ustawia wartość nice procesu. Wartość 19 oznacza najniższy priorytet dla procesu (najmniej uprzywilejowany).

Wartość nice może wahać się od -20 (najwyższy priorytet) do 19 (najniższy priorytet). Procesy z niższym priorytetem nice (wyższymi wartościami) będą miały mniejsze szanse na uzyskanie czasu procesora, gdy inne procesy również potrzebują zasobów CPU.

Oczywiście wartości dostosuj do własnych potrzeb i wymagań

Zapisz edytowany plik i zrestartuj usługi wpisując w konsoli

sudo systemctl daemon-reload
sudo systemctl restart clamav-daemon

Kolejnym krokiem, który warto zrobić jest dodanie tzw. SWAP (partycji wymiany) do systemu, jeśli go nie posiadasz. Co prawda nie rozwiąże on problemu serwera z barkiem pamięci ale pozwoli ci w pewien sposób rozładować nieco obciążenia spowodowane jego brakiem.

Jaka powinna być wielkość takiego pliku/partycji wymiany? Proponuję przeznaczyć na nią tyle ile posiadasz pamięci ram w swoim VPS. Jeśli jest to np. 2GB, na swap przeznacz też 2GB itp.

Na początek utwórz plik wymiany

$ sudo fallocate -l 2G /swapfile

Następnie nadaj mu odpowiednie uprawnienia

$ sudo chmod 600 /swapfile

oraz odpowiednią strukturę

$ sudo mkswap /swapfile

i aktywuj go

$ sudo swapon /swapfile

Na koniec jeszcze dodaj go do /etc/fstab aby aktywował się zawsze automatycznie po restarcie serwera

/swapfile swap swap defaults 0 0

Kolejnym krokiem będzie modyfikacja swappiness, czyli określenie kiedy nasz serwer powinien zacząć korzystać ze swapu. Standardowo jest to 60, czyli od 40% wykorzystania pamięci ram.

$ cat /proc/sys/vm/swappiness

Zmieńmy ten parametr na taki, aby się to odbywało od 90% wykorzystania pamięci ram

$ sudo sysctl vm.swappiness=10

aby ten parametr zmienić na stałe musisz zmodyfikować plik /etc/systcl.conf

i dopisać do niego

vm.swappiness=10

Główną przyczyną modyfikacji tego parametru jest to, że pewnie nie chciałbyś aby przy niewielkiej zajętości pamięci ram, np. twój memcache, redis czy inny serwer cachujący zaczął korzystać z dysku zamiast dostępnej pamięci ram.

W taki oto dość prosty sposób, dość skutecznie przywrócić możemy prawidłowe funkcjonowanie serwera po jego restarcie.

Artykuł był pierwotnie opublikowany na stronie botset.pl dnia 29.07.2021 roku.

Autor

  • gielo

    Witam! Jestem pasjonatem technologii z wykształceniem matematycznym i informatycznym. W kręgu moich zainteresowań leży między innymi elektronika, linuks i technologie serwerowe.

    View all posts