Belastningstest av Apache och Tomcat på en VPS


Publicerad:

Uppdaterad:


Tekniska artiklar > Belastningstest av Apache och Tomcat på en VPS

Status 2026 och säker användning

Slutsats: I en kedja med Apache framför Tomcat kan den första flaskhalsen finnas i testklienten, Apache-processerna, Tomcats connector-trådar, JVM-heap eller GC, applikationen, databasen eller VPS-resurserna. Samtidighet måste bedömas tillsammans med svarstid, fel och resursmätningar.

Det här går artikeln igenom

  • Vad det historiska VPS-experimentet med Apache och Tomcat mätte.
  • Hur gränser i proxyservern och Tomcats connectors samverkar med applikationens svarstid.
  • Vad ett modernt test bör registrera: percentiler, genomströmning, fel, CPU, minne, GC, trådar och belastning på beroende tjänster.

Målgrupp: Java-webbteam som vill utforma ett litet och evidensbaserat kapacitetstest.

Läge 2026: Resultaten nedan kommer från författarens originaltest och mättes inte på nytt inför uppdateringen. Läs dem som en fallstudie, inte som verifierad aktuell prestanda eller en rekommendation om VPS-storlek.

Säkerhetsinformation: Belastningstesta endast system som du har uttryckligt tillstånd att testa. Kommandona och konfigurationsexemplen i originalartikeln har inte testats på nytt i en aktuell produktionsmiljö. Kontrollera versioner med support, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö.

Viktiga officiella källor

Översikt

Det historiska experimentet belastade en Spring-baserad inloggningssekvens i en miljö med Apache HTTP Server, Tomcat och PostgreSQL på samma VPS. Resultatet beskriver endast den testade konfigurationen och är ingen allmän kapacitetsgräns.

En separat artikel dokumenterar testet av en enkel statisk sida i enbart Apache HTTP Server.

Belastningstest av Apache på en liten VPS

Innehållsförteckning

  1. Testupplägg
  2. Detaljerade testresultat
  3. Sammanfattning

1. Testupplägg

1-1. Testmiljö

Testet genomfördes i följande miljö.

■ VPS-resurser

CPU2 kärnor
Minne1 GB
SSD50 GB

■ Serverprogramvara

OSCentOS 7.4 64bit
WebbserverApache HTTP Server 2.4.41
ApplikationsserverApache Tomcat 9.0.27
DatabasserverPostgreSQL 10.2
JavaOpenJDK 11

1-2. Mätmetod

Belastningen skapades med JMeter, ett Java-baserat verktyg för belastningstest. Antalet samtidiga testtrådar ökades stegvis tills anslutningsfel uppstod.

Testet använde följande villkor.

  • Intervall mellan begäranden: 5 sekunder.
  • Antal samtidiga testtrådar: start vid 10, därefter ökning med 10 per körning.
  • Testtid per körning: 60 sekunder.

Med 60 sekunders testtid och fem sekunders intervall skickade varje testtråd tolv begäranden.

1-3. Mätresultat

I den testade miljön slutfördes körningen med 80 samtidiga testtrådar utan rapporterat anslutningsfel. Vid 90 trådar uppstod fel.

CPU: 2 kärnor
Minne: 1 GB
SSD: 50 GB
80 samtidiga testtrådar utan rapporterat fel i detta test.

Tabellen nedan visar den ursprungliga artikelns uppskattningar för andra VPS-storlekar. Endast miljön med två CPU-kärnor och 1 GB minne mättes; övriga rader är inte verifierade testresultat.

CPU: 1 kärna
Minne: 512 MB
SSD: 25 GB
Ursprunglig, ej verifierad uppskattning: 20 samtidiga testtrådar.
CPU: 2 kärnor
Minne: 1 GB
SSD: 50 GB
Observerat: 80 samtidiga testtrådar utan rapporterat fel.
CPU: 3 kärnor
Minne: 2 GB
SSD: 100 GB
Ursprunglig, ej verifierad uppskattning: 200 samtidiga testtrådar.

Antalet samtidiga testtrådar kan inte direkt översättas till ett visst antal verkliga användare. Resultatet beror bland annat på trafikmönster, svarstider, databaslast och serverkonfiguration.

2. Detaljerade testresultat

Följande avsnitt beskriver testscenariot, resursanvändningen och hur de ursprungliga uppskattningarna togs fram.

2-1. Test av Apache och Tomcat

Varje testtråd loggade in i en Spring-baserad webbapplikation och hämtade en listsida efter autentiseringen.

Testkörningarna gav följande resultat.

  • 10 samtidiga testtrådar: OK
  • 20 samtidiga testtrådar: OK
  • 30 samtidiga testtrådar: OK
  • 40 samtidiga testtrådar: OK
  • 50 samtidiga testtrådar: OK
  • 60 samtidiga testtrådar: OK
  • 70 samtidiga testtrådar: OK
  • 80 samtidiga testtrådar: OK
  • 90 samtidiga testtrådar: anslutningsfel

Vid 90 samtidiga testtrådar misslyckades anslutningar till Apache. Serverns resursanvändning var då följande.

  • CPU-användning: 26%
  • Minnesanvändning: 100%

Minnet var därmed den begränsande resursen i just den här körningen.

Apache använde följande konfiguration för Multi-Processing Module (MPM), som bland annat styr hur många begäranden servern kan behandla parallellt.

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

MaxRequestWorkers var satt till 250, men det tillgängliga minnet tog slut innan den gränsen nåddes. Den ursprungliga mätningen uppskattade minnesåtgången till cirka 8 MB per Apache-process.

Java-processen uppskattades använda 320 MB (heap: 248 MB, metaspace: 72 MB), medan 80 Apache-processer uppskattades använda 640 MB.
Summan, cirka 960 MB, låg nära den tillgängliga minnesmängden på 1 GB.

Det observerade felet uppstod i anslutningen till Apache.

Mätningen visar dock inte ensam att Tomcat saknade andra begränsningar, och resultatet bör inte tolkas som en generell kapacitetsgräns.

2-2. Tolkning och begränsningar

Eftersom minnet tog slut gjordes följande uppskattningar av hur fler eller färre Apache-processer skulle påverka minnesbehovet. De är räkneexempel, inte separata belastningstest.

Observerad miljö med 1 GB minne:

  • Minne: 1 GB
  • Antal Apache-processer: 80
  • Uppskattad minnesåtgång per Apache-process: 8 MB
  • Uppskattad minnesåtgång för Apache: 640 MB (80 × 8 MB)
  • Uppskattad minnesåtgång för Tomcat: 320 MB (heap: 248 MB, metaspace: 72 MB)
  • Uppskattad total minnesåtgång för Apache och Tomcat: 960 MB

Hypotetiskt räkneexempel med 2 GB minne:

  • Minne: 2 GB
  • Antal Apache-processer: 200
  • Uppskattad minnesåtgång per Apache-process: 8 MB
  • Uppskattad minnesåtgång för Apache: 1 600 MB (200 × 8 MB)
  • Uppskattad minnesåtgång för Tomcat: 320 MB (heap: 248 MB, metaspace: 72 MB)
  • Uppskattad total minnesåtgång för Apache och Tomcat: 1 920 MB

Räkneexemplet bevisar inte att miljön klarar 200 samtidiga testtrådar. En större miljö måste testas på nytt, och gränser som MaxRequestWorkers, JVM-minne, databasanslutningar och operativsystemets resurser behöver bedömas tillsammans.

Hypotetiskt räkneexempel med 512 MB minne:

  • Minne: 512 MB
  • Antal Apache-processer: 20
  • Uppskattad minnesåtgång per Apache-process: 8 MB
  • Uppskattad minnesåtgång för Apache: 160 MB (20 × 8 MB)
  • Uppskattad minnesåtgång för Tomcat: 320 MB (heap: 248 MB, metaspace: 72 MB)
  • Uppskattad total minnesåtgång för Apache och Tomcat: 480 MB

3. Sammanfattning

I den mätta miljön klarade Apache och Tomcat 80 samtidiga JMeter-trådar utan rapporterat anslutningsfel; vid 90 trådar tog minnet slut och anslutningar misslyckades.

Resultatet gäller det beskrivna scenariot och den angivna konfigurationen. Uppskattningarna för 512 MB och 2 GB är inte verifierade.

Kapacitet för verkliga användare måste fastställas med ett representativt belastningstest och tillräckliga marginaler.