Obremenitveni preizkus strežnikov Apache in Tomcat na VPS: ozka grla in rezultati
Datum objave:
Posodobljeno:
Tehnični članki > Obremenitveni preizkus strežnikov Apache in Tomcat na VPS: ozka grla in rezultati
Stanje in varna uporaba v letu 2026
Sklep: V skladu Apache–Tomcat je lahko prvo ozko grlo generator obremenitve, procesi posrednika, niti povezovalnika, kopica JVM ali delovanje zbiralnika pomnilnika (GC), aplikacijska koda, zbirka podatkov ali sam VPS. Eno samo število sočasnih zahtev ne opredeli zmogljivosti brez podatkov o zakasnitvah, napakah in porabi virov.
Kaj boste izvedeli
- Kaj je meril prvotni preizkus dvonivojskega sklada na VPS.
- Kako omejitve posrednika in Tomcatovega povezovalnika vplivajo na odzivni čas aplikacije.
- Kaj beležiti v sodobnem preizkusu: percentile zakasnitve, prepustnost, napake, procesor, pomnilnik, dejavnost zbiralnika pomnilnika, niti in nasičenost odvisnih storitev.
Komu je članek namenjen? Ekipam za spletne aplikacije v Javi, ki pripravljajo manjši, z meritvami podprt preizkus zmogljivosti.
Opomba za leto 2026: Spodnji rezultati pripadajo prvotnemu preizkusu in ob tej uredniški posodobitvi niso bili ponovljeni. Obravnavajte jih kot študijo primera, ne kot potrjeno trenutno zmogljivost ali priporočilo za nakup VPS.
Varnostna opomba: Ukazi in konfiguracijski primeri iz prvotnega članka niso bili znova preizkušeni v sodobnem produkcijskem okolju. Pred uporabo v ločenem preizkusnem okolju preverite podprte različice, izdelajte varnostne kopije ter določite nadzor dostopa in postopek povrnitve.
Uradni viri
Pregled
Članek predstavlja rezultate preizkusa sočasnih zahtev v okolju, kjer Apache deluje kot spletni strežnik, Tomcat pa izvaja aplikacijo v Javi. Rezultati opisujejo samo to okolje in niso neposredno priporočilo za izbiro zmogljivosti drugega VPS.
Ta preizkus zajema oba strežnika. Ločen članek obravnava okolje, v katerem deluje samo Apache.
Obremenitveni preizkus strežnika Apache HTTP na majhnem VPS: postopek in rezultati
Kazalo vsebine
1. Meritev
1-1. Preizkusno okolje
Meritev je bila izvedena v naslednjem okolju.
■ Zmogljivost VPS
| Procesor | 2 jedri |
|---|---|
| Pomnilnik | 1 GB |
| SSD | 50 GB |
■ Programska oprema strežnika
| Operacijski sistem | CentOS 7.4, 64-bitni |
|---|---|
| Spletni strežnik | Apache HTTP Server 2.4.41 |
| Aplikacijski strežnik | Apache Tomcat 9.0.27 |
| Zbirka podatkov | PostgreSQL 10.2 |
| Java | OpenJDK 11 |
1-2. Postopek meritve
Za ustvarjanje obremenitve je bil uporabljen JMeter, orodje, napisano v Javi, ki lahko pošilja več zahtev sočasno. Število sočasnih zahtev se je povečevalo v korakih, dokler okolje ni več uspešno opravilo preizkusa.
Zabeleženi pogoji preizkusa so bili:
- Presledek med zahtevami: 5 sekund.
- Začetno število sočasnih zahtev: 10; nato se je povečevalo po 10.
- Trajanje posamezne meritve: 60 sekund.
Pri 60-sekundnem preizkusu in 5-sekundnem presledku je vsak navidezni uporabnik zahtevo poslal približno 12-krat (60 ÷ 5).
1-3. Rezultati meritve
V opisanem okolju je bil največji uspešno opravljen korak 80 sočasnih zahtev.
| Procesor: 2 jedri Pomnilnik: 1 GB SSD: 50 GB | Izmerjeno: uspeh pri 80 sočasnih zahtevah. |
|---|
Spodnje vrednosti za drugačne zmogljivosti so grobe ocene iz prvotnega članka, ne ločene meritve. Dejanska zmogljivost se ne spreminja nujno sorazmerno s pomnilnikom ali številom jeder.
| Procesor: 1 jedro Pomnilnik: 512 MB SSD: 25 GB | Groba ocena: 20 sočasnih zahtev. |
|---|---|
| Procesor: 2 jedri Pomnilnik: 1 GB SSD: 50 GB | Izmerjeno: 80 sočasnih zahtev. |
| Procesor: 3 jedra Pomnilnik: 2 GB SSD: 100 GB | Groba ocena: 200 sočasnih zahtev. |
Število sočasnih zahtev ni enako številu uporabnikov, zato iz te meritve ni mogoče zanesljivo sklepati, koliko uporabnikov podpira manjši VPS.
2. Podrobnosti rezultatov
V nadaljevanju so zapisani posamezni koraki preizkusa in opažena poraba virov.
2-1. Meritev sklada Apache–Tomcat
Preizkusni scenarij je zajemal prijavo uporabnika in prikaz seznama po uspešni prijavi. Aplikacija, vključno s preverjanjem pristnosti, je bila razvita z ogrodjem Spring.
Zabeleženi rezultati posameznih korakov so bili:
- 10 sočasnih zahtev ⇒ uspešno
- 20 sočasnih zahtev ⇒ uspešno
- 30 sočasnih zahtev ⇒ uspešno
- 40 sočasnih zahtev ⇒ uspešno
- 50 sočasnih zahtev ⇒ uspešno
- 60 sočasnih zahtev ⇒ uspešno
- 70 sočasnih zahtev ⇒ uspešno
- 80 sočasnih zahtev ⇒ uspešno
- 90 sočasnih zahtev ⇒ napaka
Pri koraku z 90 sočasnimi zahtevami je odjemalec zabeležil napako povezave s strežnikom Apache. Takrat sta bili izmerjeni naslednji vrednosti:
- Uporaba procesorja: 26 %
- Uporaba pomnilnika: 100 %
Meritev zato kaže, da je bilo v tem preizkusu prvo opaženo ozko grlo pomnilnik.
Uporabljena konfiguracija modula MPM prefork je bila naslednja. MPM med drugim določa, koliko zahtev lahko Apache obdeluje vzporedno.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
Direktiva "MaxRequestWorkers" je bila nastavljena na 250. To je zgornja meja sočasno obdelanih zahtev, vendar je sistem zaradi razpoložljivega pomnilnika lahko omejen že prej. V preizkusu je posamezni proces Apache porabil približno 8 MB.
Proces JVM je po zabeleženih vrednostih uporabljal približno 320 MB (248 MB kopice in 72 MB metaprostora), Apache pa približno 640 MB (8 MB × 80 procesov). Skupaj je to približno 960 MB.
Opomba: VPS je imel 1 GB pomnilnika, zato se je skupna poraba približala njegovi meji.
V zabeleženem trenutku Tomcat ni kazal iste omejitve, povezava pa je odpovedala na strani strežnika Apache. Za zanesljiv sklep bi bilo treba hkrati pregledati še niti povezovalnika, dnevnike, dejavnost zbiralnika pomnilnika in odvisne storitve.
V opisanem okolju z Apachejem in Tomcatom je bil zadnji uspešni korak pri 80 sočasnih zahtevah. Nastavitev Jave je predvidevala 248 MB kopice in 72 MB metaprostora.
2-2. Razlaga rezultatov
Ker je bil v tem preizkusu pomnilnik prvo ozko grlo, prvotni članek primerja grobe izračune pri različnih količinah pomnilnika. To niso ponovno izvedene meritve.
Izmerjeno okolje z 1 GB pomnilnika:
- Pomnilnik: 1 GB
- Število procesov Apache: približno 80
- Ocenjena poraba na proces Apache: 8 MB
- Ocenjena poraba Apache: 640 MB (80 × 8 MB)
- Zabeležena poraba Tomcata: 320 MB (248 MB kopice in 72 MB metaprostora)
- Skupna ocenjena poraba Apache in Tomcata: 960 MB
Groba ocena pri 2 GB pomnilnika:
- Pomnilnik: 2 GB
- Ocenjeno število procesov Apache: približno 200
- Predpostavljena poraba na proces Apache: 8 MB
- Ocenjena poraba Apache: 1600 MB (200 × 8 MB)
- Predpostavljena poraba Tomcata: 320 MB (248 MB kopice in 72 MB metaprostora)
- Skupna ocenjena poraba Apache in Tomcata: 1920 MB
Če bi vse porabe ostale nespremenjene, bi grobi izračun pri 2 GB dopuščal približno 200 procesov Apache poleg Tomcata. To mora potrditi meritev, saj se lahko prej pojavijo druga ozka grla. Pri več pomnilnika bi bilo treba preveriti tudi MaxRequestWorkers, kopico JVM in število niti povezovalnika.
Groba ocena pri 512 MB pomnilnika:
- Pomnilnik: 512 MB
- Ocenjeno število procesov Apache: približno 20
- Predpostavljena poraba na proces Apache: 8 MB
- Ocenjena poraba Apache: 160 MB (20 × 8 MB)
- Predpostavljena poraba Tomcata: 320 MB (248 MB kopice in 72 MB metaprostora)
- Skupna ocenjena poraba Apache in Tomcata: 480 MB
3. Povzetek
Na določenem VPS z 2 jedroma in 1 GB pomnilnika je scenarij Apache–Tomcat uspešno prestal korak z 80 sočasnimi zahtevami, pri 90 pa se je pojavila napaka povezave in pomnilnik je bil v celoti uporabljen.
Rezultat ne določa števila uporabnikov in ga ni mogoče neposredno prenesti na drugo aplikacijo ali okolje. Produkcijsko zmogljivost določite z merjenjem lastnega celotnega sklada, pragovi zakasnitve in napak, telemetrijo vseh ravni ter ustrezno rezervo virov.
Pri uporabi v novejšem okolju upoštevajte tudi opombe o različicah in varnosti na začetku članka.