मेरे पास nginx के साथ एक छोटा VPS सेटअप है। मैं इससे जितना संभव हो उतना प्रदर्शन निचोड़ना चाहता हूं, इसलिए मैं अनुकूलन और लोड परीक्षण के साथ प्रयोग कर रहा हूं।
मैं ब्लिट्ज.आईओ का उपयोग एक छोटी स्टैटिक टेक्स्ट फाइल प्राप्त करके लोड टेस्टिंग करने के लिए कर रहा हूं, और एक अजीब मुद्दे में चल रहा है जहां सर्वर टीसीपी रिसेट भेजते हुए प्रतीत होता है, जब एक साथ कनेक्शन की संख्या लगभग 2000 तक पहुंच जाती है। मुझे पता है कि यह एक बहुत ही है बड़ी राशि, लेकिन htop के उपयोग से सर्वर में अभी भी सीपीयू समय और मेमोरी में बहुत कुछ है, इसलिए मैं इस मुद्दे के स्रोत का पता लगाना चाहूंगा कि क्या मैं इसे और भी आगे बढ़ा सकता हूं।
मैं 2GB लाइनोड VPS पर Ubuntu 14.04 LTS (64-बिट) चला रहा हूं।
इस ग्राफ को सीधे पोस्ट करने के लिए मेरे पास पर्याप्त प्रतिष्ठा नहीं है, इसलिए यहां ब्लिट्ज.आईओ ग्राफ का लिंक दिया गया है:
यहाँ चीजें हैं जो मैंने कोशिश की हैं और समस्या के स्रोत का पता लगाने के लिए:
- Nginx config मान
worker_rlimit_nofile
8192 पर सेट है - उपयोगकर्ता और उपयोगकर्ता (जो nginx के रूप में चलाता है) के
nofile
लिए दोनों कठिन और नरम सीमा के लिए 64000 पर सेट हैroot
www-data
/etc/security/limits.conf
कोई संकेत नहीं हैं कि कुछ भी गलत हो रहा है
/var/log/nginx.d/error.log
(आम तौर पर, यदि आप फ़ाइल डिस्क्रिप्टर सीमा में चल रहे हैं, तो nginx त्रुटि संदेशों को प्रिंट करेगा)मेरे पास ufw सेटअप है, लेकिन नियमों को सीमित करने की कोई दर नहीं है। Ufw लॉग इंगित करता है कि कुछ भी अवरुद्ध नहीं किया जा रहा है और मैंने उसी परिणाम के साथ ufw को अक्षम करने का प्रयास किया है।
- इसमें कोई सांकेतिक त्रुटियां नहीं हैं
/var/log/kern.log
- इसमें कोई सांकेतिक त्रुटियां नहीं हैं
/var/log/syslog
मैंने निम्नलिखित मान जोड़ दिए हैं
/etc/sysctl.conf
और उन्हेंsysctl -p
बिना किसी प्रभाव के साथ लोड किया है:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
कोई विचार?
संपादित करें: मैंने एक नया परीक्षण किया, एक बहुत छोटी फ़ाइल (केवल 3 बाइट्स) पर 3000 कनेक्शन के लिए रैंपिंग। यहाँ Blitz.io ग्राफ है:
फिर से, ब्लिट्ज के अनुसार ये सभी त्रुटियां "टीसीपी कनेक्शन रीसेट" त्रुटियां हैं।
यहाँ लिनोइड बैंडविड्थ ग्राफ है। ध्यान रखें कि यह 5 मिनट का औसत है, इसलिए यह कम पास को थोड़ा फ़िल्टर्ड करता है (तात्कालिक बैंडविड्थ शायद बहुत अधिक है), लेकिन फिर भी, यह कुछ भी नहीं है:
सी पी यू:
मैं / हे:
यहाँ htop
परीक्षण के अंत के पास है:
मैंने कुछ भिन्न (लेकिन समान दिखने वाले) परीक्षण पर tcpdump का उपयोग करते हुए कुछ ट्रैफ़िक कैप्चर किए, त्रुटियों के शुरू होने पर कैप्चर शुरू करना:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
यदि कोई इस पर एक नज़र डालना चाहता है (~ 20MB): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=haring
यहाँ Wireshark से एक बैंडविड्थ ग्राफ है:
(लाइन सभी पैकेट हैं, नीले रंग की पट्टियाँ टीसीपी त्रुटी हैं)
कैप्चर की मेरी व्याख्या से (और मैं कोई विशेषज्ञ नहीं हूं), ऐसा लग रहा है कि टीसीपी आरएसटी झंडे लोड परीक्षण स्रोत से आ रहे हैं, सर्वर नहीं। इसलिए, यह मानते हुए कि लोड परीक्षण सेवा के पक्ष में कुछ गलत नहीं है, क्या यह मान लेना सुरक्षित है कि यह लोड परीक्षण सेवा और मेरे सर्वर के बीच नेटवर्क प्रबंधन या DDOS शमन के कुछ प्रकार का परिणाम है?
धन्यवाद!
net.core.netdev_max_backlog
2000 तक सेट करते हैं? मैंने कई उदाहरण देखे हैं कि यह गीगाबिट (और 10Gig) कनेक्शन के लिए अधिक परिमाण का क्रम है।