Apache ir Tomcat apkrovos bandymas VPS: ribos ir rezultatai
Paskelbimo data:
Atnaujinta:
Techniniai straipsniai > Apache ir Tomcat apkrovos bandymas VPS: ribos ir rezultatai
2026 m. būsena ir saugus naudojimas
Išvada: Apache ir Tomcat sistemoje pirmąją ribą gali pasiekti apkrovos klientas, tarpinis serveris, jungčių gijos, JVM heap ar GC, programos kodas, duomenų bazė arba pats VPS. Vienas bandymo skaičius pajėgumo nenustato be delsos, klaidų ir išteklių metrikų.
Ką išmoksite
- Ką iš tiesų matavo pradinis dviejų pakopų VPS eksperimentas.
- Kaip tarpinio serverio ir „Tomcat“ jungties apribojimai sąveikauja su programos atsako laiku.
- Ką registruoti šiuolaikiniame bandyme: delsos procentilius, pralaidumą, klaidas, CPU, atmintį, GC, gijas ir kitus prisotinimo požymius.
Kam tai skirta: Java žiniatinklio komandoms, besimokančioms kurti nedidelį, įrodymais pagrįstą pajėgumo bandymą.
2026 m. kontekstas: toliau pateikti rezultatai priklauso originaliam autoriaus bandymui ir šio redakcinio atnaujinimo metu nebuvo atkurti. Vertinkite juos kaip atvejo analizę, o ne patikrintą dabartinį našumą ar VPS pirkimo rekomendaciją.
Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.
Pagrindiniai oficialūs šaltiniai
Apžvalga
Šiame istoriniame VPS bandyme stebėtas Apache HTTP Server ir Tomcat sudarytos sistemos elgesys didinant lygiagrečią apkrovą. Rezultatai galioja tik aprašytai konfigūracijai.
Atskiras straipsnis aprašo tik Apache statinio HTML puslapio bandymą:
Apache HTTP serverio apkrovos bandymas mažame VPS
Turinys
1. Matavimas
1-1. Matavimo aplinka
Bandymas atliktas šioje aplinkoje.
■ VPS informacija
| CPU | 2core |
|---|---|
| memory | 1GB |
| SSD | 50GB |
■ Programinės įrangos informacija
| OS | CentOS 7.4 64bit |
|---|---|
| Žiniatinklio serveris | Apache HTTP Server 2.4.41 |
| AP serveris | Apache Tomcat 9.0.27 |
| DB serveris | PostgreSQL 10.2 |
| Java | OpenJDK 11 |
1-2. Matavimo metodas
Apkrova generuota Java pagrindu veikiančiu JMeter. Lygiagrečių naudotojų skaičius didintas po 10, kol bandymo scenarijus pradėjo fiksuoti klaidas.
Bandymo sąlygos:
- užklausų intervalas: 5 sek.;
- lygiagrečių naudotojų skaičius: didinamas po 10;
- vieno matavimo trukmė: 60 sekundžių.
Esant 60 sekundžių trukmei ir 5 sekundžių intervalui, kiekvienas naudotojas scenarijų pakartojo 12 kartų.
1-3. Matavimo rezultatas
Pradinėje 2 branduolių ir 1 GB atminties aplinkoje bandymo scenarijus pasiekė šį rezultatą:
| CPU: 2core memory: 1GB SSD: 50GB | 80 lygiagrečių užklausų scenarijus baigtas be užfiksuotos klaidos. |
|---|
Toliau pateikta lentelė buvo pirminio straipsnio apytikslė ekstrapoliacija. Kitos VPS konfigūracijos faktiškai nebuvo išmatuotos, todėl šių skaičių nenaudokite pajėgumui prognozuoti.
| CPU: 1core memory: 512MB SSD: 25GB | Vienu metu galima apdoroti iki 20 užklausų. |
|---|---|
| CPU: 2core memory: 1GB SSD: 50GB | Vienu metu galima apdoroti iki 80 užklausų |
| CPU: 3core memory: 2GB SSD: 100GB | Vienu metu galima apdoroti iki 200 užklausų. |
Iš vieno bandymo negalima pagrįstai teigti, kad 1 branduolio, 512 MB atminties ir 25 GB SSD sistema be problemų aptarnaus 20 naudotojų. Tam reikia atskiro bandymo su tikru programos profiliu ir delsos kriterijais.
2. Išsami informacija apie matavimo rezultatus
Toliau pateikiami išsamesni pradinio bandymo stebėjimai.
2-1. WEB/AP serverio (Apache, Tomcat) matavimai
Bandymo scenarijus prisijungė per autentifikavimo ekraną ir atvėrė sąrašo puslapį. Programa buvo sukurta naudojant Spring, įskaitant autentifikavimo funkciją.
Atlikus matavimus gauti tokie rezultatai.
- 10 užklausų vienu metu⇒OK
- 20 užklausų vienu metu⇒OK
- 30 užklausų vienu metu⇒OK
- 40 užklausų vienu metu⇒OK
- 50 užklausų vienu metu⇒OK
- 60 užklausų vienu metu⇒OK
- 70 užklausų vienu metu⇒OK
- 80 užklausų vienu metu⇒OK
- 90 užklausų vienu metu⇒NG
Esant 90 lygiagrečių užklausų bandymo scenarijui užfiksuota ryšio su Apache klaida. Tuo metu stebėta:
- procesoriaus apkrova: 26 %;
- atminties naudojimas: 100 %.
Šie rodmenys leidžia įtarti atminties trūkumą, tačiau tiksliai priežasčiai patvirtinti reikėtų procesų, apsikeitimo atminties, JVM, klaidų žurnalų ir delsos metrikų.
Apache Multi-Processing Module (MPM) nustato, kaip kuriami procesai ar gijos ir kiek užklausų gali būti vykdoma lygiagrečiai.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
MaxRequestWorkers reikšmė buvo 250, tačiau tai tik konfigūracijos viršutinė riba, o ne garantuotas pajėgumas. Iš stebėtų skaičių apytiksliai apskaičiuota apie 8 MB vienam Apache procesui.
Apytiksliu vertinimu Java naudojo 320 MB (248 MB heap ir 72 MB metaspace), o Apache – 640 MB (80 procesų po 8 MB). Bendra 960 MB reikšmė beveik išnaudojo 1 GB VPS atmintį, tačiau šis skaičiavimas nėra tikslus vienos užklausos atminties matas.
Vien to, kad Tomcat neparodė akivaizdžios klaidos, nepakanka kliūčiai vienareikšmiškai priskirti Apache. Reikėtų abiejų pakopų ir JVM telemetrijos.
Šioje konkrečioje 2 branduolių, 1 GB atminties ir 50 GB SSD aplinkoje 80 lygiagrečių užklausų scenarijus dar baigtas be užfiksuotos klaidos, o 90 užklausų scenarijus jau pateikė klaidą. Java nustatymai buvo 248 MB heap ir 72 MB metaspace.
2-2. Rezultatų aptarimas
Atmintis šiame bandyme galėjo būti pirmasis ribojantis išteklius, tačiau vien padidinus jos kiekį našumas nebūtinai didėja tiesiškai: ribą gali lemti ir CPU, tinklas, Apache, Tomcat, JVM, programa ar duomenų bazė.
Pradinė aplinka (1 GB atminties)
- memory: 1GB
- "Apache" gijų skaičius: 80
- Atminties suvartojimas vienai "Apache" gijai: 8 MB
- "Apache" atminties suvartojimas: 640 MB (80 × 8 MB)
- "Tomcat" atminties suvartojimas: 320MB (248MB heap, 72MB metaspace)
- "Apache+Tomcat" atminties sąnaudos: 960MB
Hipotetinė aplinka po pakeitimo (2 GB atminties)
- memory: 2GB
- "Apache" gijų skaičius: 200
- Atminties suvartojimas vienai "Apache" gijai: 8 MB
- "Apache" atminties suvartojimas: 1600 MB (200 × 8 MB)
- "Tomcat" atminties suvartojimas: 320MB (248MB heap, 72MB metaspace)
- "Apache+Tomcat" atminties sąnaudos: 1920MB
200 lygiagrečių užklausų skaičius yra tik tiesinė ekstrapoliacija, o ne išmatuotas rezultatas. Padidinus atmintį būtina pakartoti bandymą ir stebėti kitas ribas. Apache MPM ir JVM atmintį derinkite pagal realų programos profilį.
Hipotetinė aplinka sumažinus atmintį (512 MB)
- memory: 512MB
- "Apache" gijų skaičius: 20
- Atminties suvartojimas vienai "Apache" gijai: 8 MB
- "Apache" atminties suvartojimas: 160 MB (20 × 8 MB)
- "Tomcat" atminties suvartojimas: 320MB (248MB heap, 72MB metaspace)
- "Apache+Tomcat" atminties sąnaudos: 480MB
3. Santrauka
Pradiniame 1 GB VPS bandyme 80 lygiagrečių prisijungimo scenarijų dar baigti be užfiksuotos klaidos, o ties 90 scenarijų užfiksuota ryšio klaida ir 100 % atminties naudojimas.
Šio rezultato negalima tiesiogiai perkelti kitai programai ar VPS konfigūracijai. Pajėgumą nustatykite pakartojamu bandymu, stebėdami delsos procentilius, klaidas, Apache, Tomcat, JVM, duomenų bazę ir serverio išteklius bei palikdami gamybinę atsargą.
Techniniai straipsniai
Peržiūrėkite visus techninius straipsnius.
Profilis
Peržiūrėkite autoriaus profilį.
Kontaktai