Nginx ile küçük bir VPS kurulumum var. Mümkün olduğunca fazla performans elde etmek istiyorum, bu yüzden optimizasyon ve yük testi ile denemeler yapıyorum.
Küçük bir statik metin dosyası alarak yük testi yapmak için Blitz.io kullanıyorum ve aynı anda bağlantı sayısı kabaca 2000 ulaştığında sunucu TCP sıfırlama gönderme gibi görünüyor garip bir sorunla karşılaşıyorum. Bu çok olduğunu biliyorum büyük miktarda, ancak htop kullanarak sunucu hala CPU zaman ve bellek yedeklemek için bol var, bu yüzden daha da itebilir miyim görmek için bu sorunun kaynağını bulmak istiyorum.
2 GB Linode VPS'de Ubuntu 14.04 LTS (64 bit) kullanıyorum.
Bu grafiği doğrudan yayınlamak için yeterli itibarım yok, bu yüzden Blitz.io grafiğine bir bağlantı:
Sorunun kaynağını bulmaya çalışmak için yaptığım şeyler:
- Nginx yapılandırma değeri
worker_rlimit_nofile
8192 olarak ayarlandı - gelmiş
nofile
hem sert ve yumuşak sınırları için 64000 ayarlıroot
vewww-data
kullanıcı (olarak çalışır nginx neyi) içinde/etc/security/limits.conf
herhangi bir şeyin yanlış gittiğine dair hiçbir belirti yoktur
/var/log/nginx.d/error.log
(genellikle, dosya tanımlayıcı sınırlarına giriyorsanız, nginx hata mesajlarını yazdırır)Ben ufw kurulum var, ama hiçbir hız sınırlama kuralları. Ufw günlüğü hiçbir şeyin engellenmediğini gösterir ve aynı sonuçla ufw'yi devre dışı bırakmayı denedim.
- Hiçbir gösterge hatası yok
/var/log/kern.log
- Hiçbir gösterge hatası yok
/var/log/syslog
Ben değerleri aşağıdaki eklemiş
/etc/sysctl.conf
ve bunları yüklüsysctl -p
hiçbir etkisi ile:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
Herhangi bir fikir?
EDIT: Ben çok küçük bir dosya (sadece 3 bayt) 3000 bağlantıya rampa yeni bir test yaptım. İşte Blitz.io grafiği:
Yine, Blitz'e göre bu hataların tümü "TCP Bağlantısı sıfırlama" hatalarıdır.
İşte Linode bant genişliği grafiği. Bunun 5 dakikalık bir ortalama olduğunu unutmayın, bu yüzden düşük geçiş biraz filtrelenmiştir (anlık bant genişliği muhtemelen çok daha yüksektir), ancak yine de, bu hiçbir şey değildir:
İŞLEMCİ:
I / O:
İşte htop
testin sonuna yaklaştık:
Ayrıca, hataların gelmeye başladığı zaman yakalamaya başlayarak, farklı (ama benzer görünümlü) bir testte tcpdump kullanarak bazı trafiği yakaladım:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
Birisi ona bakmak isterse dosya şöyledir (~ 20MB): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=sharing
İşte Wireshark'tan bir bant genişliği grafiği:
(Satır tüm paketler, mavi çubuklar TCP hatalarıdır)
Yakalama hakkındaki yorumumdan (ve ben uzman değilim), TCP RST bayrakları sunucudan değil yük test kaynağından geliyor gibi görünüyor. Bu nedenle, yük testi hizmeti tarafında bir şeylerin yanlış olduğunu varsayarsak, bunun yük testi hizmeti ile sunucum arasındaki bir tür ağ yönetiminin veya DDOS azaltmasının bir sonucu olduğunu varsaymak güvenli midir?
Teşekkürler!
net.core.netdev_max_backlog
2000'e kadar ayarlamanızın bir nedeni var mı ? Gördüğüm birkaç örnek, gigabit (ve 10Gig) bağlantıları için daha yüksek bir büyüklük sırasına sahip.