5

के साथ नोडजेज़ पर लोड परीक्षण बाधाएं मुझे पता नहीं चल सकता कि इस साइट पर बाधा का कारण क्या है, 400 उपयोगकर्ताओं के पहुंचने के बाद बहुत खराब प्रतिक्रिया समय। साइट नेटवर्क लोड बैलेंसिंग के साथ, एक इंस्टेंस समूह का उपयोग करके, Google कंप्यूट इंजन पर है। हमने परियोजना को सेलज के साथ बनाया है।
मैं Google कंटेनर इंजन के साथ क्यूबनेटेट का उपयोग करके लोड परीक्षण कर रहा हूं, locust.py स्क्रिप्ट चला रहा हूं।Google Compute Engine

परीक्षणों में से एक के लिए मुख्य परिणाम हैं:

RPS : 30 
Spawn rate: 5 p/s 
TOTALS USERS: 1000 
AVG(res time): 27500!! (27,5 seconds) 

प्रतिक्रिया समय शुरू में एक दूसरे के नीचे, बहुत अच्छा है, लेकिन जब यह लगभग 400 उपयोगकर्ताओं तक पहुँचने शुरू होता है प्रतिक्रिया समय बड़े पैमाने पर कूदने के लिए शुरू होता है।

मैं स्पष्ट कारक हैं जो कि प्रतिक्रिया समय को प्रभावित कर सकते का परीक्षण किया है, नीचे दिए गए परिणाम:

कंप्यूट इंजन उदाहरण (2 एक्स मानक-n2, 200GB डिस्क, राम: उदाहरण के प्रति 7.5gb):

Only about 20% cpu utilization used 
Outgoing network bytes: 340k bytes/sec 
Incoming network bytes: 190k bytes/sec 
Disk operations: 1 op/sec 
Memory: below 10% 

MySQL:

Max_used_connections : 41 (below total possible) 
Connection errors: 0 

सभी MySQL के लिए अन्य परिणाम भी ठीक लगते हैं, बाधा उत्पन्न करने का कोई कारण नहीं है।

मैंने एक नई सैलज बनाई गई परियोजना के लिए एक ही परीक्षण की कोशिश की, और यह बेहतर रहा, लेकिन अभी भी भयानक परिणाम हुए, लगभग 2000 उपयोगकर्ताओं के लिए 5 सेकंड का समय था।

मुझे और क्या परीक्षण करना चाहिए? बाधा क्या हो सकती है?

+1

यह आपके node.js कोड में होने की संभावना है। संभवतया कुछ सिंक्रोनस इवेंट लूप को अवरुद्ध कर रहा है जो आपके द्वारा अनुरोध/सेकंड को चलाने के रूप में विस्फोट करता है। इसे प्रोफाइल करने का प्रयास करें। – bbuckley123

+0

धन्यवाद। मुझे बहुत से लोग यह कह रहे हैं कि globalAgent.maxSockets एक मुद्दा हो सकता है। वर्तमान डिफ़ॉल्ट 5 है। क्या यह कारण हो सकता है? @ bbuckley123 – cfl

+0

डिफ़ॉल्ट वास्तव में अनंत है। कई नोड रिलीज़ के लिए यह तरीका रहा है: https://nodejs.org/api/http.html#http_agent_maxsockets – bbuckley123

उत्तर

3

क्या आप कोई फ़ाइल पढ़ रहे/लिख रहे हैं? यह node.js में एक बड़ी बाधा है, और हमेशा कुछ मुद्दों का कारण बन जाएगा। कैशिंग पढ़ना फ़ाइलें या ऐसे कोड की आवश्यकता को हटाने के लिए जितना संभव हो सके किया जाना चाहिए। मेरे अपने अनुभव में, छवियों, सीएसएस, जेएस और इस तरह की गड़बड़ी जैसी फाइलों की सेवा करने से मेरा नोड सर्वर परेशानी पैदा करने की शुरुआत करेगा जब समवर्ती अनुरोधों की मात्रा में वृद्धि हुई है। समाधान यह सब सीडीएन की सेवा करने के लिए था।

एक और समस्या mysql ड्राइवर हो सकता है। कनेक्शन के साथ हमें कुछ समस्याएं ठीक से बंद नहीं हो रही थीं (sails.js का उपयोग नहीं कर रही है, लेकिन मुझे लगता है कि जब मैंने इसका सामना किया था तब वे उसी ड्राइवर का इस्तेमाल करते थे), इसलिए वे MySQL सर्वर पर समस्याएं पैदा करेंगे, जिसके परिणामस्वरूप डेटा लाने पर लंबी देरी होती है डेटाबेस से आपको mysql प्रश्नों की मात्रा को समय/ट्रैक करना चाहिए और सुनिश्चित करना चाहिए कि वे देरी नहीं कर रहे हैं।

आखिरकार, यह sails.js और Google compute इंजन के साथ कुछ विशेष समस्या हो सकती है। आपको यह सुनिश्चित करना चाहिए कि आप इनमें से किसी भी समस्या के बारे में किसी भी खुले मुद्दे पर अनुभव नहीं कर रहे हैं।

+0

हमारी परियोजना में शायद ही कोई पठन/लेखन और ब्रांड नई सेलज परियोजना भी 'बमबारी' है, जो मूल रूप से कोई पढ़ता/लिखता नहीं है। तो भले ही सीडीएन ऑप्टिमाइज़ेशन में मदद करता है, यह नहीं दिखाता कि हमारे परिणाम इतने खराब क्यों हैं? मैंने MySQL उदाहरण की जांच की, वहां कोई बाधा नहीं, शायद ही कोई पढ़ता/लिखता है। जैसा कि बताया गया है कि हमने ब्रांड नई sailsjs परियोजना की कोशिश की, जो कोई डीबी प्रश्नों का उपयोग नहीं करता है। आपके द्वारा उल्लिखित अंतिम बिंदु संभव है, मुझे अभी तक कुछ भी नहीं मिला है, लेकिन खोज जारी रहेगा। आपकी प्रतिक्रिया – cfl

+0

@cfl के लिए धन्यवाद, क्या आप पोस्ट या जीईटी अनुरोध भेज रहे हैं (मैंने sails.js में POST के साथ किसी समस्या के बारे में कहीं पढ़ा है)? क्या आप यह दिखाने के लिए एक रेपो बना सकते हैं कि आप वास्तव में क्या कर रहे हैं? – amberv

+0

हां, यही वह है जो हम अपने अनुरोधों के लिए उपयोग करते हैं। हम अपने मार्ग.जेएस फ़ाइल में इसका उपयोग करते हैं। यह किस तरह की समस्या थी, क्या आपको शायद याद है? रेपो को रेक्स एक कठिन एक सोज है, मेरे पास बौद्धिक संपदा मुद्दों का कारण है। रेपो में आप वास्तव में क्या चाहते हैं? लेकिन प्रवाह का विचार देने के लिए, हम sails.get ("/ get_info", संदेश) का उपयोग करते हैं जो तब नियंत्रक विधि को कॉल करने के लिए routes.js के माध्यम से जाता है। नियंत्रक विधि तब पानी की रेखा के साथ डीबी प्रश्न आदि करता है और फिर प्रतिक्रिया देता है। @amberv – cfl