Testovanie záťaže Apache a Tomcat na VPS: úzke miesta a výsledky


Dátum vydania:

Aktualizované:


Technické články > Testovanie záťaže Apache a Tomcat na VPS: úzke miesta a výsledky

Stav a bezpečné používanie v roku 2026

Záver: V zostave Apache a Tomcat môže výkon obmedziť klient, proxy, konektor, JVM, aplikácia, databáza aj samotné VPS. Kapacitu preto treba hodnotiť podľa latencie, chybovosti a využitia zdrojov, nie podľa jediného počtu súbežných požiadaviek.

Čo sa naučíte

  • Čo meral pôvodný test dvojvrstvovej zostavy na VPS.
  • Ako limity proxy servera a konektora Tomcatu spolu s časom odozvy aplikácie ovplyvňujú kapacitu.
  • Čo zaznamenávať pri modernom teste: percentily latencie, priepustnosť, chyby, CPU, pamäť, GC, vlákna a zaťaženie nadväzujúcich systémov.

Pre koho je to určené: Tímy vyvíjajúce webové aplikácie v Jave, ktoré si chcú pripraviť menší, ale preukázateľný test kapacity.

Kontext v roku 2026: Výsledky patria k pôvodnému testu autora a pri tejto redakčnej aktualizácii sa neopakovali. Berte ich ako historickú prípadovú štúdiu, nie ako aktuálny údaj o výkone ani ako odporúčanie na nákup VPS.

Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Táto prípadová štúdia zaznamenáva záťažový test zostavy s webovým serverom Apache a aplikačným serverom Tomcat na jednom prenajatom VPS. Počet súbežných požiadaviek sa zvyšoval až do prvého zlyhania, aby sa v danom prostredí našlo úzke miesto.

Samostatný článok opisuje meranie servera Apache bez Tomcatu.

Záťažový test samotného servera Apache na prenajatom VPS

Obsah

  1. Meranie
  2. Podrobnosti o výsledkoch merania
  3. Zhrnutie

1. Meranie

1-1. Prostredie merania

Test prebehol v nasledujúcom prostredí.

■ Parametre prenajatého servera

CPU2core
Pamäť1GB
SSD50GB

■ Softvér servera

OSCentOS 7.4 64bit
Webový serverApache HTTP Server 2.4.41
Aplikačný serverApache Tomcat 9.0.27
Databázový serverPostgreSQL 10.2
JavaOpenJDK 11

1-2. Metóda merania

Na meranie bol použitý JMeter, záťažový nástroj spúšťaný v Jave. Počet súbežných požiadaviek sa postupne zvyšoval, kým ich zostava prestala spoľahlivo spracúvať.

Test mal tieto podmienky:

  • Interval požiadaviek: 5 sekúnd
  • Počiatočný počet súbežných požiadaviek: 10 (v každom ďalšom meraní sa zvýšil o 10)
  • Trvanie merania: 60 sekúnd

Pri trvaní 60 sekúnd a intervale 5 sekúnd sa každá požiadavka opakovala 12-krát (60 ÷ 5).

1-3. Výsledok merania

V testovanom prostredí sa prvé zlyhanie objavilo po prekročení 80 súbežných požiadaviek. Nasledujúca hodnota preto opisuje iba tento konkrétny test.

CPU: 2core
memory: 1GB
SSD: 50GB
Možno spracovať až 80 súbežných požiadaviek

Nasledujúce hodnoty sú pôvodné lineárne odhady podľa veľkosti pamäte. Neboli samostatne overené a nemajú sa používať ako kapacitná záruka.

CPU: 1core
memory: 512MB
SSD: 25GB
Súčasne možno spracovať až 20 požiadaviek.
CPU: 2core
memory: 1GB
SSD: 50GB
Možno spracovať až 80 súbežných požiadaviek
CPU: 3core
memory: 2GB
SSD: 100GB
Súčasne možno spracovať až 200 požiadaviek.

V pôvodnom odhade zodpovedala zostava s jedným jadrom CPU, 512 MB pamäte a 25 GB SSD približne 20 súbežným požiadavkám. Tento počet nemožno zamieňať s počtom reálnych používateľov.

2. Podrobnosti o výsledkoch merania

Nasledujú podrobnosti, z ktorých vychádza uvedený výsledok.

2-1. Meranie zostavy Apache a Tomcat

Testovací scenár otvoril prihlasovaciu stránku, prihlásil používateľa a potom zobrazil stránku so zoznamom. Aplikácia vrátane overovania bola vytvorená vo frameworku Spring.

Meranie prinieslo tieto výsledky:

  • 10 súbežných požiadaviek – úspech
  • 20 súbežných požiadaviek – úspech
  • 30 súbežných požiadaviek – úspech
  • 40 súbežných požiadaviek – úspech
  • 50 súbežných požiadaviek – úspech
  • 60 súbežných požiadaviek – úspech
  • 70 súbežných požiadaviek – úspech
  • 80 súbežných požiadaviek – úspech
  • 90 súbežných požiadaviek – zlyhanie

Pri 90 súbežných požiadavkách nastala chyba pripojenia k Apache. Server mal v tom čase nasledujúce využitie zdrojov:

  • Využitie CPU: 26%
  • využitie pamäte: 100%

Prvým pozorovaným úzkym miestom bola vyčerpaná pamäť.

Test používal nasledujúcu konfiguráciu modulu viacnásobného spracovania servera Apache (MPM), ktorý okrem iného určuje počet paralelne obsluhovaných požiadaviek.

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

Hodnota "250" v nastavení "MaxRequestWorkers" predstavuje horný limit súbežne obsluhovaných požiadaviek. Pamäť sa však vyčerpala skôr: jeden proces Apache podľa pozorovania spotreboval približne 8 MB.

Java spotrebovala približne 320 MB pamäte (248 MB halda a 72 MB metaspace) a Apache približne 640 MB (8 MB × 80 procesov). Hoci bol limit MPM nastavený na 250, dostupná pamäť neumožnila vytvoriť viac než približne 80 procesov.
Poznámka: Server mal 1 GB pamäte; Apache a Java spolu spotrebovali približne 960 MB.

Aplikačný server pri tomto meraní nevykazoval problémy, takže prvé pozorované úzke miesto bolo na strane Apache.

V tomto konkrétnom teste zostavy Apache a Tomcat bola pri dvoch jadrách CPU, 1 GB pamäte a 50 GB SSD hranica pozorovaná pri približne 80 súbežných požiadavkách. Java mala nastavenú haldu 248 MB a metaspace 72 MB.

2-2. Vyhodnotenie

Keďže prvým úzkym miestom bola pamäť, pôvodný článok odhadoval počet procesov pri inej kapacite pamäte. Ide o lineárny odhad, nie o výsledok ďalších meraní.

Pôvodná zostava (pamäť 1 GB)

  • Pamäť: 1 GB
  • Počet procesov Apache: 80
  • Spotreba pamäte na jeden proces Apache: 8 MB
  • Spotreba pamäte Apache: 640 MB (80 procesov × 8 MB)
  • Spotreba pamäte Tomcat: 320 MB (248 MB halda, 72 MB metaspace)
  • Spotreba pamäte Apache a Tomcat: 960 MB

Odhad po zmene (pamäť 2 GB)

  • Pamäť: 2 GB
  • Počet procesov Apache: 200
  • Spotreba pamäte na jeden proces Apache: 8 MB
  • Spotreba pamäte Apache: 1600 MB (200 procesov × 8 MB)
  • Spotreba pamäte Tomcat: 320 MB (248 MB halda, 72 MB metaspace)
  • Spotreba pamäte Apache a Tomcat: 1920 MB

Lineárny odhad pri 2 GB pamäte vychádza na približne 200 procesov, táto hodnota však nebola nameraná. Po zvýšení pamäte sa môže prejaviť iné úzke miesto, napríklad CPU, MaxRequestWorkers, front konektora, zber odpadu alebo samotná aplikácia. Každú novú zostavu treba znovu otestovať. Pôvodný odhad pre polovičnú pamäť vyzeral takto:

Odhad po zmene (pamäť 512 MB)

  • Pamäť: 512 MB
  • Počet procesov Apache: 20
  • Spotreba pamäte na jeden proces Apache: 8 MB
  • Spotreba pamäte Apache: 160 MB (20 procesov × 8 MB)
  • Spotreba pamäte Tomcat: 320 MB (248 MB halda, 72 MB metaspace)
  • Spotreba pamäte Apache a Tomcat: 480 MB

3. Zhrnutie

Historický test zostavy Apache a Tomcat dosiahol zvolenú hranicu približne pri 80 súbežných požiadavkách na serveri s dvoma jadrami CPU a 1 GB pamäte. Odhad 20 požiadaviek pre 512 MB nebol samostatne overený a nepredstavuje bezpečný počet reálnych používateľov.

Výsledok závisel od konkrétnej aplikácie a nastavenia JVM aj Apache. Produkčnú zostavu treba dimenzovať s rezervou a overiť testom, ktorý zodpovedá skutočným požiadavkám, databáze a prevádzkovým podmienkam.

Pri porovnávaní výsledkov sledujte okrem priepustnosti aj percentily latencie, chybovosť, zber odpadu a využitie serverových zdrojov.