VPS'te Apache ve Tomcat yük testi: darboğazlar ve sonuçlar


Yayın tarihi:

Güncelleme:


Teknik makaleler > VPS'te Apache ve Tomcat yük testi: darboğazlar ve sonuçlar

2026 bağlamı ve güvenli kullanım

Sonuç: Apache'den Tomcat'e bir yığında ilk sınır; istemci, proxy çalışanları, bağlayıcı iş parçacıkları, JVM yığını veya çöp toplama, uygulama kodu, veritabanı veya VPS'nin kendisi olabilir. Tek bir eşzamanlılık numarası gecikme, hata ve kaynak kanıtı olmadan kapasiteyi tanımlayamaz.

Ne öğreneceksiniz

  • Orijinal iki katmanlı VPS deneyinin ölçtüğü şey.
  • Proxy ve Tomcat bağlayıcı sınırlarının uygulama yanıt süresiyle etkileşimi.
  • Modern bir testte kaydedilmesi gerekenler: yüzdelikler, aktarım hızı, hatalar, CPU, bellek, GC, iş parçacıkları ve aşağı akış doygunluğu.

Bu kimin için: Java web ekipleri küçük, kanıta dayalı bir kapasite testinin nasıl tasarlanacağını öğreniyor.

2026 bağlamı: Aşağıdaki sonuçlar yazarın orijinal testine aittir ve bu editoryal güncelleme için çoğaltılmamıştır. Bunları, doğrulanmış mevcut performans veya VPS satın alma önerisi olarak değil, bir örnek olay olarak değerlendirin.

Güvenlik notu: Orijinal makaledeki komutlar ve yapılandırma örnekleri mevcut üretim ortamında yeniden çalıştırılmamıştır. Desteklenen sürümleri, yedeklemeleri, erişim kontrollerini ve geri alma adımlarını uygulamadan önce ayrı bir test ortamında doğrulayın.

Başlıca resmî kaynaklar

Genel bakış

WEB/AP sunucularının (Apache ve Tomcat) aynı anda işleyebileceği maksimum vaka sayısını ölçtüm ve sonuçlar hakkında yazmak istiyorum. Hizmet verilebilecek maksimum talep sayısını merak ediyorduk, bu yüzden bir anket yaptık. VPS sunucu özelliklerini seçmek için bunu bir referans olarak kullanın.

Bu kez ölçümler WEB/AP sunucularında (Apache ve Tomcat) gerçekleştirilmiştir, ancak yalnızca WEB (Apache) üzerindeki ölçümler için lütfen aşağıdaki makaleye bakın.

Küçük bir VPS'te Apache HTTP Server yük testi: yöntem ve sonuçlar

İçindekiler

  1. ölçüm
  2. Ölçüm sonuçlarının ayrıntıları
  3. özet

1. ölçüm

1-1. Ölçüm ortamı

Ölçümlerin yapılacağı ortam aşağıda belirtilmiştir.

■Kiralık sunucu bilgileri

CPU2core
memory1GB
SSD50GB

■Sunucu bilgileri

OSCentOS 7.4 64bit
Web sunucusuApache HTTP Server 2.4.41
AP SunucusuApache Tomcat 9.0.27
DB sunucusuPostgreSQL 10.2
JavaOpenJDK 11

1-2. Ölçüm yöntemi

Bunu JMeter kullanarak ölçmek istiyorum. JMeter, Java'da çalışan bir yük ölçüm aracıdır. Araç, çok sayıda talebin aynı anda atılmasına izin verir. JMeter kullanarak eşzamanlı isteklerin sayısını kademeli olarak artırmak ve işlem artık gerçekleştirilemeyene kadar yükü artırmak istiyoruz.

Belirli koşullar şunları içerir.

  • istek aralığı: 5 saniye.
  • Eşzamanlı talep sayısı: 10 vaka. (Ölçümler kademeli olarak her biri 10 vaka artmıştır.)
  • Zaman ölçümü: 60 saniye.

Ölçüm süresi "60 saniye" ve talep aralığı "5 saniye" olduğundan, sisteme tekrar tekrar 12 kez (60÷5) erişmek istiyorsunuz.

1-3. ölçüm sonucu

Sonunda, birçok kişi sunucunun hangi özellikleri ve ne kadarını kaldırabileceği sonucuyla ilgileniyor, bu yüzden önce sonucu belirtmek istiyorum.

CPU: 2core
memory: 1GB
SSD: 50GB
80 adede kadar eşzamanlı talep işlenebilir

Bu ölçümün sonuçları yukarıda belirtilenleri göstermiştir. Yukarıdaki sonuçlar aşağıdaki çıkarımların yapılabileceğini göstermektedir. Sunucu özelliklerini seçerken bunu bir kriter olarak kullanmaya çalışın.

CPU: 1core
memory: 512MB
SSD: 25GB
Aynı anda en fazla 20 talep işlenebilir.
CPU: 2core
memory: 1GB
SSD: 50GB
80 adede kadar eşzamanlı talep işlenebilir
CPU: 3core
memory: 2GB
SSD: 100GB
Aynı anda 200'e kadar talep işlenebilir.

Yaklaşık 20 kullanıcılı bir sistemin "CPU: 1core", "memory: 512MB" ve "SSD: 25GB" ile sorunsuz çalışacağı tespit edilmiştir.

2. Ölçüm sonuçlarının ayrıntıları

Ölçüm sonuçlarını daha önce açıkladık, ancak ne tür sonuçlar açıkladığımızla ilgileniyorsanız, lütfen ileride açıklanacak olan ölçüm sonucu ayrıntılarını da kontrol edin.

2-1. WEB/AP sunucusu (Apache, Tomcat) ölçümleri

İstek, kullanıcının giriş ekranından giriş yaptığı ve giriş yaptıktan sonra liste ekranının görüntülendiği bir senaryoda atılmıştır. Bu arada, ekran, kimlik doğrulama işlevi de dahil olmak üzere Spring çerçevesi kullanılarak oluşturulmuştur.

Ölçümler aşağıdaki sonuçları göstermiştir.

  • 10 eşzamanlı talep için⇒OK
  • 20 eşzamanlı talep için⇒OK
  • 30 eşzamanlı talep için⇒OK
  • 40 eşzamanlı talep için⇒OK
  • 50 eşzamanlı talep için⇒OK
  • 60 eşzamanlı talep için⇒OK
  • 70 eşzamanlı talep için⇒OK
  • 80 eşzamanlı talep için⇒OK
  • 90 eşzamanlı talep için⇒NG

Hata 90. vakada meydana gelmiştir. Nedeni Apache'ye bir bağlantı hatasıydı. Bu sırada sunucunun durumu aşağıdaki gibiydi.

  • CPU kullanımı: 26%
  • bellek kullanımı: 100%

Tam bir bellek eksikliği darboğazdı.

Biraz daha meraklı olanlar için Apache Çoklu İşlem Modülü (MPM) yapılandırması aşağıdaki gibidir. MPM basitçe Apache'nin paralel olarak ne kadar işlem yapmasına izin verileceğinin ayarlanması olarak açıklanmaktadır.

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

İlgilenilen ayar "MaxRequestWorkers" için "250 "dir. Bu, Apache'nin aynı anda işleyebileceği maksimum vaka sayısı için bir ayardır. '250', bu nedenle 250 vaka maksimum paralel olarak işlenebilir, ancak bellek kullanımına bakıldığında, vaka başına yaklaşık 8 MB bellek kullanılmıştır.

Java 320MB bellek (heap için 248M ve metaspace için 72M) ve Apache 640MB bellek (8M x 80 işlem) kullanıyor gibi görünüyordu ve Apache'nin MPM ayar değeri '250' olmasına rağmen, '80' işlemden daha fazlasını oluşturamıyor gibi görünüyordu.
Not: Sunucu 1G belleğe sahip, bu nedenle Apache ve Java için toplam bellek 960MB, yani neredeyse üst sınırda.

AP sunucusu (Java tarafı) iyi çalışıyordu, bu nedenle darboğaz WEB sunucusuydu (Apache).

Apache ve Tomcat kurulup çalıştırıldığında, "CPU: 2core, memory: 1GB, SSD: 50GB" özellikleri ile eşzamanlı erişim sayısının "80" sınırı olduğunu gördük. (Java için bellek ayarlarının heap için 248M ve metaspace için 72M olduğu varsayılmaktadır.)

2-2. dikkate almak

Ancak bellek darboğaz olduğu için, bellek değiştirilirse eşzamanlı olarak işlenebilecek işlem sayısı da artacaktır.

(Burada. (memory1GB))

  • memory: 1GB
  • Apache iş parçacığı sayısı: 80 vaka.
  • Apache'de iş parçacığı başına bellek tüketimi.: 8MB
  • Apache bellek tüketimi: 640MB (80 vaka.×8MB)
  • Tomcat bellek tüketimi: 320MB (HEAP için 248 milyon., Metaspace için 72m.)
  • Apache+Tomcat'in bellek tüketimi: 960MB

(değişiklikten sonra (memory2GB))

  • memory: 2GB
  • Apache iş parçacığı sayısı: 200 vaka
  • Apache'de iş parçacığı başına bellek tüketimi.: 8MB
  • Apache bellek tüketimi: 1600MB (200 vaka×8MB)
  • Tomcat bellek tüketimi: 320MB (HEAP için 248 milyon., Metaspace için 72m.)
  • Apache+Tomcat'in bellek tüketimi: 1920MB

2 GB bellek ile 200 vakayı aynı anda işlemek mümkün olabilir. Bellek 3GB'a çıkarılırsa, daha fazla eşzamanlı işlem yapılabilir gibi görünüyor, ancak Apache'nin MPM'sinin "MaxRequestWorkers (eşzamanlı olarak işlenecek maksimum vaka sayısı)" "250" dir, bu nedenle bellek daha da artırılırsa burada da ayarlama yapılması gerekecektir. Java bellek ayarlaması da gerekebilir. Tersine, bellek yarıya indirilirse, aşağıdaki gibi olacaktır.

(değişiklikten sonra (memory512GB))

  • memory: 512GB
  • Apache iş parçacığı sayısı: 20 vaka
  • Apache'de iş parçacığı başına bellek tüketimi.: 8MB
  • Apache bellek tüketimi: 160MB (20 vaka×8MB)
  • Tomcat bellek tüketimi: 320MB (HEAP için 248 milyon., Metaspace için 72m.)
  • Apache+Tomcat'in bellek tüketimi: 480MB

3. özet

WEB/AP sunucularının (Apache ve Tomcat) aynı anda işleyebileceği maksimum vaka sayısının ölçülmesinin sonuçları açıklanmıştır. Yaklaşık 20 kullanıcılı bir sistemin "CPU: 1core", "memory: 512MB" ve "SSD: 25GB" ile sorunsuz çalışacağı tespit edilmiştir.

Anket, başka hiçbir yazılımın marjinal performansta çalışmadığı varsayımına dayanmaktadır. Marjinal bir değer olduğu için biraz esnek bir spesifikasyon seçilmesi tavsiye edilir.

Umarız bu açıklama yararlı olmuştur.