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
1-1. Ölçüm ortamı
Ölçümlerin yapılacağı ortam aşağıda belirtilmiştir.
■Kiralık sunucu bilgileri
| CPU | 2core |
|---|---|
| memory | 1GB |
| SSD | 50GB |
■Sunucu bilgileri
| OS | CentOS 7.4 64bit |
|---|---|
| Web sunucusu | Apache HTTP Server 2.4.41 |
| AP Sunucusu | Apache Tomcat 9.0.27 |
| DB sunucusu | PostgreSQL 10.2 |
| Java | OpenJDK 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.