Množstvo pamäte RAM má pravdepodobne najväčší dopad na výkon vášho virtuálneho servera (VPS) a na počet návštevníkov, ktorý dokáže obslúžiť. Nedostatok pamäte RAM sa môže prejaviť viacerými spôsobmi, najčastejšie však nestabilitou bežiacich služieb ako FTP alebo MySQL server, alebo dlhými načítacími časmi stránok.
Má moje VPS problém s nedostatkom RAM?
Aktuálny stav pamäte RAM je možné skontrolovať po prihlásení na SSH: užívateľsky prívetivé zobrazenie poskytuje program htop:
Možné príznaky nedostatku RAM
1. Načítanie stránok trvá omnoho dlhšie než obyčajne.
Zvýšená návštevnosť stránok na VPS môže mať za následok zvýšené pamäťové nároky. Pokiaľ VPS nedokáže držať všetky práve načítavané webstránky v RAM, začne používať tzv. virtuálnu pamäť (swap partíciu, obdoba stránkovacieho súboru Windows). Táto doplnková pamäť je však niekoľkonásobne pomalšia než RAM, a tak pri jej využití dochádza k drastickému zníženiu výkonu VPS.
Tomuto chovaniu môžeme zabrániť buď navýšením dostupnej pamäte RAM, alebo obmedzením množstva RAM, ktorú môže webserver spotrebovať.
Trochu matematiky
U každého načítania stránky sa na pozadí spustí PHP proces, ktorý zo zdrojových súborov vygeneruje výsledný HTML kód, ktorý môže odoslať prehliadaču. Počas behu tohto procesu spotrebuje PHP určité množstvo pamäte RAM, ktoré záleží na aplikácii – WordPress v základnej instalácii vystačí s 48MB, kdežto Drupal s niekoľkými pozapínanými pluginmi si môže vyžiadat niekoľko stovák MB RAM. Toto množstvo sa násobí s každým ďalším návštevníkom stránky – pokiaľ si náš hypotetický WordPress prezerajú naraz desiati návštevnící, spotrebujú spolu 10 x 48 = 480MB RAM.
Pokiaľ má naše VPS dostupných 512MB RAM, dokáže obslúžiť 10 návštevníkov, ale pri jedenástom sa mu minie dostupná RAM pamäť a začne swapovať na disk. Pre zachovanie optimálneho výkonu nám Apache webserver ponúka moznosť obmeziť počet návštevníkov (klientov) ktorých bude naraz obsluhovať.
Návštevníci, ktorí prekročia tento limit pri pokuse o načítanie stránky dostanú okamžite chybovú hlášku. Toto môže znieť kontraproduktívne, avšak vo väčšine prípadov je ideálnejšie, pokiaľ server pracuje na plný výkon pre všetkých návštevníkov ktorých zvládne, než aby sa snažil obslúžiť všetkých a zasekol sa pri tom.
Limitujeme návštevníkov
Nastavenie, ktoré limituje počet súbežne bežiacich procesov sa nazýva MaxClients v Apache 2.2 (dodávaného s Ubuntu 12.04) a MaxRequestWorkers v Apache 2.4 (Ubuntu 14.04). Môžme ho upraviť v nasledovných konfiguračných súboroch:
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žívať nové hodnoty, reštartujeme ho pomocou príkazu apache2ctl restart.
2. Nemôžem sa pripojiť na FTP / stránky sa nevedia pripojiť na MySQL server.
K pádom náhodných služieb na virtuálnom serveri môže tiež dôjsť kvôli nedostatku pamäte RAM. Operačný systém môže nedostatok pamäte vyhodnotiť ako problém brániaci v stabilnom behu serveru a ukončí tak procesy “s nízkou prioritou”, medzi ktoré patrí napríklad MySQL server alebo FTP server (proFTPd). Proces, ktorý sa o takéto recyklovanie systémových prostriedkov stará, je láskyplne nazývaný OOM (out-of-memory) killer.
Ako zistíme, že sme sa stali obeťou OOM killeru? Keď sa k VPS pripojíme cez SSH, môžeme skontrolovať niektoré systémové logy, v ktorých je jeho činnosť zaznamenávaná:
root@mojevps# dmesg | grep memory
[8274699.045685] Out of memory: Kill process 7793 (mysqld) score 579 or sacrifice childroot@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
Podľa uvedených záznamov bol kvôli nedostatku pamäte “zabitý” MySQL server.
Opätovné naštartovanie služieb
Služby, ktoré boli takto “zabité” je možné naštartovať dvoma spôsobmi. Pokial sme na serveri prihlásení cez SSH, služby môžme naštartovať pomocou:
/etc/init.d/mysql start # (v prípade pádu MySQL serveru)
/etc/init.d/proftpd start # (v prípade pádu FTP serveru)
Alternatívne môžme cez Webadmin reštartovať celé VPS, čo tiež spojazdní nefunkčné služby.
Navýšenie parametrov VPS
V prípade, že sa VPS rozhodlo spustiť OOM-killer, okrem pamäte RAM sa mu minula aj “virtuálna” pamäť (stránkovacia partícia, obdoba stránkovacieho súboru Windows).
Virtuálne servery VPS sú štandardne vytvárané so swap partíciou o veľkosti 1GB. Pokiaľ operačný systém spustil OOM killer, je vhodné pamäť RAM navýšiť minimálne o tento 1GB.