1. Home
  2. Cloud a servery
  3. Virtuální server (VPS)
  4. Nedostatek RAM paměti na virtuálním serveru

Nedostatek RAM paměti na virtuálním serveru

Množství paměti RAM má pravděpodobně největší dopad na výkon vašeho virtuálního serveru (VPS) a na počet návštěvníků, který dokáže obsloužit. Nedostatek paměti RAM se může projevit vícerými způsoby, nejčastěji však nestabilitou běžících služeb jako FTP nebo MySQL server, nebo dlouhými načítacími časy stránek.

Má moje VPS problém s nedostatkem RAM?


Aktuální stav paměti RAM je možné zkontrolovat po přihlášení na SSH: uživatelsky přívětivé zobrazení poskytuje program htop:

V tomto případě má server obsazených 2847MB RAM z celkových 4096MB.

Možné příznaky nedostatku RAM


1. Načítání stránek trvá o mnoho déle než obyčejně.

Zvýšená návštěvnost stránek na VPS může mít za následek zvýšené paměťové nároky. Pokud VPS nedokáže držet všechny právě načítané webstránky v RAM, začne používat tzv. virtuální paměť (swap partition, obdoba stránkovacího souboru Windows). Tato doplňková paměť je však několikanásobně pomalejší než RAM, a tak při jejím využití dochází k drastickému snížení výkonu VPS.

Tomuto chování můžeme zabránit buď navýšením dostupné paměti RAM, nebo omezením množství RAM, kterou může webserver spotřebovat.

Trochu matematiky

U každého načítání stránky se na pozadí spustí PHP proces, který ze zdrojových souborů vygeneruje výsledný HTML kód, který může odeslat prohlížeči. Během tohoto procesu spotřebuje PHP určité množství paměti RAM, které záleží na aplikaci – WordPress v základní instalaci vystačí s 48MB, kdežto Drupal s několika pozapínanými pluginy si může vyžádat několik stovek MB RAM. Toto množství se násobí s každým dalším návštěvníkem stránky – pokud si náš hypotetický WordPress prohlíží naráz deset návštěvníků, spotřebují spolu 10 x 48 = 480MB RAM.

Pokud má naše VPS dostupných 512MB RAM, dokáže obsloužit 10 návštěvníků, ale u jedenáctého mu dojde dostupná RAM paměť a začne swapovat na disk. Pro zachování optimálního výkonu nám Apache webserver nabízí možnost omezit počet návštěvníků (klientů), které bude naráz obsluhovat. 

Návštěvníci, kteří překročí tento limit při pokusu o načítání stránky dostanou okamžitě chybovou hlášku. Toto může znít kontraproduktivně, ale ve většině případů je ideálnější, pokud server pracuje na plný výkon pro všechny návštěvníky které zvládne, než aby se snažil obsloužit všech a zasekl se při tom.

Limitujeme návštevníky

Nastavení, které limituje počet souběžně běžících procesů se nazývá MaxClients v Apache 2.2 (dodávaného s Ubuntu 12.04) a MaxRequestWorkers v Apache 2.4 (Ubuntu 14.04). Můžeme ho upravit v následovných konfiguračních souborech:

Apache 2.2: /etc/apache2/apache2.conf:

<IfModule mpm_prefork_module>

    StartServers                5 

    MinSpareServers             5 

    MaxSpareServers             5

    MaxClients                  150

    ServerLimit                 150

    MaxRequestsPerChild         200 

</IfModule>

Apache 2.4: /etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>

        StartServers             5

        MinSpareServers          5

        MaxSpareServers          10

        MaxRequestWorkers        150

        MaxConnectionsPerChild   0

</IfModule>

Aby webserver začal používat nové hodnoty, restartujeme ho pomocí příkazu apache2ctl‌ restart.

2. Nemůžu se připojit na FTP / stránky se neumí připojit na MySQL server.

K pádům náhodných služeb na virtuálním serveru může též dojít kvůli nedostatku paměti RAM. Operační systém může nedostatek paměti vyhodnotit jako problém bránící ve stabilním běhu serveru a ukončí tak procesy “s nízkou prioritou”, mezi které patří například MySQL server nebo FTP server (proFTPd). Proces, který se o takové recyklování systémových prostředků stará, je láskyplně nazývaný OOM (out-of-memory) killer.

Jak zjistíme, že jsme se stali obětí OOM killeru? Když se k VPS připojíme přes SSH, můžeme zkontrolovat některé systémové logy, ve kterých je jeho činnost zaznamenávaná:

root@mojevps# dmesg | grep memory

[8274699.045685] Out of memory: Kill process 7793 (mysqld) score 579 or sacrifice child

root@mojevps# grep memory /var/log/syslog

Nov 11 14:57:01 mojevps kernel: [8274699.045685] Out of memory: Kill process 7793 (mysqld) score 579 or sacrifice child

Podle uvedených záznamů byl kvůli nedostatku paměti “zabitý” MySQL server.

Opětovné nastartování služeb

Služby, které byly takto “zabité”, je možné nastartovat dvěma způsoby. Pokud jsme na serveru přihlášení přes SSH, služby můžeme nastartovat pomocí:

/etc/init.d/mysql start # (v případě pádu MySQL serveru)

/etc/init.d/proftpd start # (v případě pádu FTP serveru)

Alternativně můžeme přes Webadmin restartovat celé VPS, což také zprovozní nefunkční služby.


V případě, že se VPS rozhodlo spustit OOM-killer, kromě paměti RAM mu došla i “virtuální” paměť (stránkovací partice, obdoba stránkovacího souboru Windows).

Virtuální servery VPS jsou standardně vytvářené se swap partition o velikosti 1GB. Pokud operační systém spustil OOM killer, je vhodné paměť RAM navýšit minimálně o tento 1GB.

O navýšení parametrů VPS se dozvíte více zde.

Aktualizováno: 12 října, 2021

Byl tento článek užitečný?

Related Articles

Zákaznická podpora
24 hodin denně, 7 dní v týdnu
KONTAKTOVAT PODPORU