Stresni test Apache in Tomcat na VPS: ozka grla in rezultati
Datum objave:
Osveženo:
Tehnični članki > Stresni test Apache in Tomcat na VPS: ozka grla in rezultati
Status in varna uporaba 2026
Sklep: V Apache-to-Tomcat kup, prva omejitev je lahko odjemalec, proxy delavci, priključne niti, JVM kup ali zbiranje smeti, aplikacijska koda, baza podatkov, ali VPS sam. Enotna soglasna številka ne more opredeliti zmogljivosti brez zamud, napak in dokazov o virih.
Kaj se boš naučil?
- Kaj je prvoten dvotirni VPS poskus meril.
- Kako posrednik in Tomcat konektor omejujeta interakcijo z odzivnim časom aplikacije.
- Kaj zapisati v sodobnem preskusu: percentila, pretok, napake, procesor, pomnilnik, GC, niti, in navzdol nasičenost.
Za koga je to? Java spletne ekipe se učijo, kako oblikovati majhen, na dokazih temelječ preizkus zmogljivosti.
Kontekst za leto 2026: Spodaj navedeni rezultati spadajo k avtorjevemu prvotnemu preizkusu in za to redakcijsko posodobitev niso bili reproducirani. Obravnavajte jih kot študijo primera, ni preverjeno trenutno uspešnost ali priporočilo za nakup VPS.
Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.
Glavni uradni viri
Pregled.
Izmeril sem največje število primerov, ki jih lahko strežnika WEB/AP (Apache in Tomcat) obdelata hkrati, in o rezultatih želim pisati. Zanimalo nas je, kakšno je največje število zahtevkov, ki jih lahko postrežemo, zato smo izvedli raziskavo. To uporabite kot referenco za izbiro specifikacij strežnika VPS.
Tokrat so bile meritve opravljene na strežnikih WEB/AP (Apache in Tomcat), za meritve samo na strežniku WEB (Apache) pa glejte spodnji članek.
Kazalo vsebine
1. merjenje
1-1. Merilno okolje
Okolje, v katerem se bodo izvajale meritve, je prikazano v nadaljevanju.
■Informacije o strežniku za najem
| CPU | 2core |
|---|---|
| memory | 1GB |
| SSD | 50GB |
■Informacije o strežniku
| OS | CentOS 7.4 64bit |
|---|---|
| Spletni strežnik | Apache HTTP Server 2.4.41 |
| Strežnik AP | Apache Tomcat 9.0.27 |
| Strežnik DB | PostgreSQL 10.2 |
| Java | OpenJDK 11 |
1-2. Metoda merjenja
To bi rad izmeril s programom JMeter. JMeter je orodje za merjenje obremenitve, ki deluje v Javi. Orodje omogoča hkratno oddajo velikega števila zahtevkov. S programom JMeter želimo postopoma povečevati število hkratnih zahtevkov in povečevati obremenitev, dokler obdelave ne bo več mogoče opraviti.
Posebni pogoji vključujejo.
- interval zahtevka: 5 sek.
- Število hkratnih zahtevkov: 10 primerov. (Meritve so se postopoma povečevale po 10 primerov.)
- Merjenje časa: 60 sekund.
Čas merjenja je "60 sekund", interval zahteve pa "5 sekund", zato želite do sistema dostopati 12-krat (60÷5).
1-3. rezultat meritev
Na koncu veliko ljudi zanima zaključek o tem, katere specifikacije lahko strežnik prenese in koliko lahko prenese, zato bi rad najprej navedel zaključek.
| CPU: 2core memory: 1GB SSD: 50GB | Obdelati je mogoče do 80 hkratnih zahtevkov. |
|---|
Rezultati te meritve so pokazali zgoraj navedeno. Na podlagi zgornjih rezultatov je mogoče sklepati naslednje. Poskusite to uporabiti kot merilo pri izbiri specifikacij strežnika.
| CPU: 1core memory: 512MB SSD: 25GB | Hkrati je mogoče obdelati do 20 zahtevkov. |
|---|---|
| CPU: 2core memory: 1GB SSD: 50GB | Obdelati je mogoče do 80 hkratnih zahtevkov. |
| CPU: 3core memory: 2GB SSD: 100GB | Hkrati je mogoče obdelati do 200 zahtevkov. |
Ugotovljeno je bilo, da bi sistem z velikostjo približno 20 uporabnikov brez težav deloval s "CPU: 1 jedro", "pomnilnik: 512 MB" in "SSD: 25 GB".
2. Podrobnosti o rezultatih meritev
Rezultate meritev smo opisali že prej, če pa vas zanima, kakšne rezultate smo opisali, preverite tudi podrobnosti o rezultatih meritev, ki bodo opisane v prihodnosti.
2-1. Meritve strežnika WEB/AP (Apache, Tomcat)
Zahteva je bila oddana v scenariju, v katerem se uporabnik prijavi s prijavnega zaslona, po prijavi pa se prikaže zaslon s seznamom. Mimogrede, zaslon je zgrajen z ogrodjem Spring, vključno s funkcijo avtentikacije.
Meritve so pokazale naslednje rezultate.
- Za 10 hkratnih zahtevkov⇒OK
- Za 20 hkratnih zahtevkov⇒OK
- Za 30 hkratnih zahtevkov⇒OK
- Za 40 hkratnih zahtevkov⇒OK
- Za 50 hkratnih zahtevkov⇒OK
- Za 60 hkratnih zahtevkov⇒OK
- Za 70 hkratnih zahtevkov⇒OK
- Za 80 hkratnih zahtevkov⇒OK
- Za 90 hkratnih zahtevkov⇒NG
Napaka se je pojavila pri 90. primeru. Vzrok je bila napaka povezave z Apachejem. Stanje strežnika v tem času je bilo naslednje.
- Izkoriščenost procesorja: 26%
- izkoriščenost pomnilnika: 100%
Ozko grlo je bilo popolno pomanjkanje pomnilnika.
Za nekoliko bolj zahtevne uporabnike je konfiguracija večprocesorskega modula Apache (MPM) naslednja. MPM je preprosto razložen kot nastavitev, koliko lahko Apache obdeluje vzporedno.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
Zanimiva je nastavitev "250" za "MaxRequestWorkers". To je nastavitev za največje število primerov, ki jih lahko Apache obdela hkrati. '250', tako da je bilo mogoče vzporedno obdelati največ 250 primerov, vendar je bilo za vsak primer uporabljenih približno 8 MB pomnilnika.
Zdi se, da Java uporablja 320 MB pomnilnika (248 MB za kup in 72 MB za metaprostor), Apache pa 640 MB pomnilnika (8 MB x 80 procesov), in čeprav je Apachejeva vrednost nastavitve MPM '250', se je zdelo, da ne more ustvariti več kot '80' procesov.
Opomba: Strežnik ima 1 G pomnilnika, zato je skupni pomnilnik za Apache in Javo 960 MB, kar je skoraj na zgornji meji.
Strežnik AP (na strani Java) je deloval v redu, zato je bil ozko grlo strežnik WEB (Apache).
Ko sta Apache in Tomcat nameščena in zagnana, smo ugotovili, da je pri specifikacijah "CPU: 2core, memory: 1GB, SSD: 50GB" število hkratnih dostopov "80" omejitev. (Predpostavlja se, da so nastavitve pomnilnika za Javo 248M za kup in 72M za metaprostor.)
2-2. obravnava
Od tu naprej je treba upoštevati, da je pomnilnik ozko grlo, zato se ob spremembi pomnilnika poveča tudi število procesov, ki jih je mogoče sočasno obdelovati.
(Prisotni. (memory1GB))
- memory: 1GB
- Število niti Apache: 80 primerov.
- Poraba pomnilnika na nit v programu Apache.: 8MB
- Poraba pomnilnika Apache: 640MB (80 primerov.×8MB)
- Poraba pomnilnika Tomcat: 320MB (248 milijonov za HEAP., 72 m za metaprostor.)
- Poraba pomnilnika Apache+Tomcat: 960MB
(po spremembi (memory2GB))
- memory: 2GB
- Število niti Apache: 200 primerov
- Poraba pomnilnika na nit v programu Apache.: 8MB
- Poraba pomnilnika Apache: 1600MB (200 primerov×8MB)
- Poraba pomnilnika Tomcat: 320MB (248 milijonov za HEAP., 72 m za metaprostor.)
- Poraba pomnilnika Apache+Tomcat: 1920MB
Z 2 GB pomnilnika je mogoče hkrati obdelati 200 primerov. Če se pomnilnik poveča na 3 GB, se zdi, da je mogoče opraviti več hkratne obdelave, vendar je vrednost "MaxRequestWorkers (največje število primerov za hkratno obdelavo)" Apachejevega MPM "250", zato bo tudi tu potrebna prilagoditev, če se pomnilnik še poveča. Morda bo potrebna tudi nastavitev pomnilnika Java. Če pa se pomnilnik prepolovi, je stanje naslednje.
(po spremembi (memory512GB))
- memory: 512GB
- Število niti Apache: 20 primerov
- Poraba pomnilnika na nit v programu Apache.: 8MB
- Poraba pomnilnika Apache: 160MB (20 primerov×8MB)
- Poraba pomnilnika Tomcat: 320MB (248 milijonov za HEAP., 72 m za metaprostor.)
- Poraba pomnilnika Apache+Tomcat: 480MB
3. povzetek
Opisani so rezultati merjenja največjega števila primerov, ki jih lahko strežnika WEB/AP (Apache in Tomcat) obdelata hkrati. Ugotovljeno je bilo, da bi sistem z velikostjo približno 20 uporabnikov brez težav deloval s "CPU: 1 jedro", "pomnilnik: 512 MB" in "SSD: 25 GB".
Raziskava temelji na predpostavki, da nobena druga programska oprema ne deluje z mejno zmogljivostjo. Priporočljivo je izbrati specifikacijo z nekaj manevrskega prostora, saj gre za mejno vrednost.
Upamo, da je bila razlaga koristna.