Belastningstest av Apache och Tomcat på en VPS


Datum för offentliggörande:

Uppdaterad:


INFORMATION > Belastningstest av Apache och Tomcat på en VPS

2026 status och säker användning

Slutsats: I en Apache-till-Tomcat-stack kan den första gränsen vara klienten, proxyarbetare, anslutningstrådar, JVM-hög eller skräpinsamling, applikationskod, databas eller själva VPS. Ett enda samtidighetsnummer kan inte identifiera kapacitet utan latens, fel och resursbevis.

Vad du kommer att lära dig

  • Vad det ursprungliga VPS-experimentet i två nivåer mätte.
  • Hur proxy- och Tomcat-anslutningsgränser interagerar med appens svarstid.
  • Vad som ska spelas in i ett modernt test: percentiler, genomströmning, fel, CPU, minne, GC, trådar och nedströms mättnad.

Vem detta är till för: Java-webbteam som lär sig att designa ett litet, evidensbaserat kapacitetstest.

position 2026: Resultaten nedan tillhör författarens ursprungliga test och återgavs inte för denna redaktionella uppdatering. Behandla dem som en fallstudie, inte verifierad nuvarande prestanda eller en VPS-köprekommendation.

Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.

Officiella primära källor

Översikt.

Jag har mätt det maximala antalet fall som WEB/AP-servrarna (Apache och Tomcat) kan behandla samtidigt, och jag vill skriva om resultaten. Vi var nyfikna på det maximala antalet förfrågningar som kunde betjänas, så vi genomförde en undersökning. Använd detta som en referens när du väljer specifikationer för VPS-servern.

Den här gången utfördes mätningarna på WEB/AP-servrarna (Apache och Tomcat), men se artikeln nedan för mätningar enbart på WEB-servrarna (Apache).

Belastningstest av Apache på en liten VPS

Innehållsförteckning

  1. mätning
  2. Uppgifter om mätresultat
  3. sammanfattning

1. mätning

1-1. Mätningsmiljö

Följande är den miljö där mätningarna kommer att utföras.

■Information om uthyrningsserver

CPU2core
memory1GB
SSD50GB

■Information om servern

OSCentOS 7.4 64bit
WebbserverApache HTTP Server 2.4.41
AP-serverApache Tomcat 9.0.27
DB-serverPostgreSQL 10.2
JavaOpenJDK 11

1-2. Mätmetod

Jag vill mäta detta med hjälp av JMeter. JMeter är ett verktyg för belastningsmätning som körs i Java. Verktyget gör det möjligt att skicka ett stort antal förfrågningar samtidigt. Vi vill gradvis öka antalet samtidiga förfrågningar med hjälp av JMeter och öka belastningen tills bearbetningen inte kan hanteras längre.

Specifika villkor är bland annat.

  • Intervall för begäran・・・5 sek.
  • Antal samtidiga förfrågningar・・・10 fall.(Mätningarna ökade gradvis med 10 fall vardera.)
  • Mätning av tid・・・60 sekunder.

Mättiden är "60 sekunder" och förfrågningsintervallet "5 sekunder", så du vill komma åt systemet 12 gånger (60÷5) upprepade gånger.

1-3. resultat av mätningen

I slutändan är många människor intresserade av slutsatsen om vilka specifikationer servern kan hantera och hur mycket den kan hantera, så jag skulle vilja säga slutsatsen först.

CPU:2core
memory:1GB
SSD:50GB
Upp till 80 samtidiga förfrågningar kan behandlas.

Resultaten av denna mätning visade ovanstående. Av ovanstående resultat kan man dra följande slutsatser. Försök att använda detta som ett kriterium när du väljer serverspecifikationer.

CPU:1core
memory:512MB
SSD:25GB
Upp till 20 samtidiga förfrågningar kan behandlas.
CPU:2core
memory:1GB
SSD:50GB
Upp till 80 samtidiga förfrågningar kan behandlas.
CPU:3core
memory:2GB
SSD:100GB
Upp till 200 samtidiga förfrågningar kan behandlas.

Det visade sig att ett system med cirka 20 användare skulle fungera utan problem med "CPU: 1core", "memory: 512MB" och "SSD: 25GB".

2. Uppgifter om mätresultat

Vi har beskrivit mätresultaten tidigare, men om du är intresserad av vilken typ av resultat vi har beskrivit kan du också läsa mer om mätresultaten som kommer att beskrivas i framtiden.

2-1. Mätningar av WEB/AP-servern (Apache, Tomcat)

Förfrågan uppstod i ett scenario där användaren loggar in från inloggningsskärmen och efter inloggningen visas listskärmen. Skärmen är för övrigt byggd med Spring-ramverket, inklusive autentiseringsfunktionen.

Mätningarna gav följande resultat.

  • För 10 samtidiga förfrågningar⇒OK
  • För 20 samtidiga förfrågningar⇒OK
  • För 30 samtidiga förfrågningar⇒OK
  • För 40 samtidiga förfrågningar⇒OK
  • För 50 samtidiga förfrågningar⇒OK
  • För 60 samtidiga förfrågningar⇒OK
  • För 70 samtidiga förfrågningar⇒OK
  • För 80 samtidiga förfrågningar⇒OK
  • För 90 samtidiga förfrågningar⇒NG

Ett fel inträffade vid det 90:e fallet. Orsaken var ett fel i anslutningen till Apache. Serverns tillstånd vid denna tidpunkt var följande.

  • CPU-användning・・・26%
  • minnesanvändning・・・100%

Flaskhalsen var en fullständig brist på minne.

För den lite mer nördige är konfigurationen av Apache Multi-Processing Module (MPM) följande. MPM är enkelt förklarat en inställning av hur mycket Apache tillåts bearbeta parallellt.

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

Den intressanta inställningen är "250" för "MaxRequestWorkers". Detta är en inställning för det maximala antalet ärenden som Apache kan behandla samtidigt. "250", så 250 fall kunde behandlas maximalt parallellt, men om man tittar på minnesanvändningen användes cirka 8 MB minne per fall.

Java tycktes använda 320 MB minne (248 M för heap och 72 M för metaspace) och Apache 640 MB minne (8 M x 80 processer), och trots att Apaches MPM-inställningsvärde är "250" verkade det som om den inte kunde skapa fler än "80" processer.
※Servern har 1 G minne, så det totala minnet för Apache och Java är 960 MB, vilket nästan är den övre gränsen.

AP-servern (Java-sidan) fungerade bra, så flaskhalsen var WEB-servern (Apache).

När Apache och Tomcat är installerade och körs, fann vi att med specifikationerna "CPU: 2core, memory: 1GB, SSD: 50GB" är gränsen för antalet samtidiga åtkomster "80".(Antagandet är att minnesinställningarna för Java är 248M för heap och 72M för metaspace.)

2-2. beaktande

Härifrån blir det ett övervägande, men eftersom minnet är flaskhalsen kommer antalet processer som kan behandlas samtidigt att öka om minnet ändras.

【Närvarande.(memory1GB)】

  • memory:1GB
  • Antal Apache-trådar:80 fall.
  • Minnesförbrukning per tråd i Apache:8MB
  • Apache minnesförbrukning:640MB(80 fall.×8MB)
  • Tomcat minnesförbrukning:320MB(248 miljoner euro till HEAP.、72m för metaspace.)
  • Minnesförbrukning för Apache+Tomcat:960MB

【efter ändringen(memory2GB)】

  • memory:2GB
  • Antal Apache-trådar:200 fall
  • Minnesförbrukning per tråd i Apache:8MB
  • Apache minnesförbrukning:1600MB(200 fall×8MB)
  • Tomcat minnesförbrukning:320MB(248 miljoner euro till HEAP.、72m för metaspace.)
  • Minnesförbrukning för Apache+Tomcat:1920MB

Med 2 GB minne kan det vara möjligt att behandla 200 ärenden samtidigt. Om minnet ökas till 3 GB verkar det som om fler samtidiga bearbetningar kan göras, men "MaxRequestWorkers (maximalt antal ärenden som kan bearbetas samtidigt)" i Apaches MPM är "250", så det kommer också att bli nödvändigt att justera detta om minnet ökas ytterligare. Det kan också behövas en justering av Java-minnet. Omvänt, om minnet halveras, skulle det se ut på följande sätt.

【efter ändringen(memory512GB)】

  • memory:512GB
  • Antal Apache-trådar:20 fall
  • Minnesförbrukning per tråd i Apache:8MB
  • Apache minnesförbrukning:160MB(20 fall×8MB)
  • Tomcat minnesförbrukning:320MB(248 miljoner euro till HEAP.、72m för metaspace.)
  • Minnesförbrukning för Apache+Tomcat:480MB

3. sammanfattning

Resultaten av mätningen av det maximala antalet fall som WEB/AP-servrarna (Apache och Tomcat) kan behandla samtidigt beskrivs. Det visade sig att ett system med cirka 20 användare skulle fungera utan problem med "CPU: 1core", "memory: 512MB" och "SSD: 25GB".

Undersökningen bygger på antagandet att ingen annan programvara körs med marginell prestanda. Det rekommenderas att välja en specifikation med lite spelrum eftersom det är ett marginellt värde.

Tack för att du tittade på till slutet.