कुछ लोग कहेंगे कि दो धागे बहुत अधिक हैं - मैं उस शिविर में काफी नहीं हूं :-)
यहाँ मेरी सलाह है: उपाय, अनुमान मत करो। एक सुझाव यह है कि इसे विन्यास योग्य बनाया जाए और शुरुआत में इसे 100 पर सेट किया जाए, फिर अपने सॉफ़्टवेयर को वाइल्ड पर छोड़ दें और मॉनिटर करें कि क्या होता है।
यदि आपके थ्रेड का उपयोग 3 पर है, तो 100 बहुत अधिक है। यदि यह दिन के अधिकांश समय 100 पर रहता है, तो इसे 200 तक उछालें और देखें कि क्या होता है।
आप वास्तव में अपना कोड स्वयं उपयोग की निगरानी कर सकते हैं और अगली बार शुरू होने वाले समय के लिए कॉन्फ़िगरेशन को समायोजित कर सकते हैं लेकिन यह संभवतः ओवरकिल है।
स्पष्टीकरण और विस्तार के लिए:
मैं आपके स्वयं के थ्रेड पूलिंग सबसिस्टम को रोल करने की वकालत नहीं कर रहा हूं, हर तरह से आपके पास जो है उसका उपयोग करें। लेकिन, चूंकि आप थ्रेड्स के लिए एक अच्छे कट-ऑफ पॉइंट के बारे में पूछ रहे थे, इसलिए मुझे लगता है कि आपके थ्रेड पूल कार्यान्वयन में बनाए गए थ्रेड्स की अधिकतम संख्या को सीमित करने की क्षमता है (जो कि एक अच्छी बात है)।
मैंने थ्रेड और डेटाबेस कनेक्शन पूलिंग कोड लिखा है और उनके पास निम्नलिखित विशेषताएं हैं (जो मुझे लगता है कि प्रदर्शन के लिए आवश्यक हैं):
- सक्रिय थ्रेड्स की न्यूनतम संख्या।
- धागे की एक अधिकतम संख्या।
- कुछ समय के लिए उपयोग नहीं किए गए थ्रेड्स को बंद करना।
थ्रेड पूल क्लाइंट (यह थ्रेड की संख्या हमेशा उपयोग के लिए उपलब्ध है) के संदर्भ में न्यूनतम प्रदर्शन के लिए एक आधार रेखा निर्धारित करता है। दूसरा सक्रिय थ्रेड्स द्वारा संसाधन उपयोग पर प्रतिबंध लगाता है। तीसरा आपको शांत समय में आधार रेखा पर लौटाता है ताकि संसाधन का उपयोग कम से कम किया जा सके।
आपको काम करने के लिए पर्याप्त थ्रेड न होने के संसाधन उपयोग के खिलाफ अप्रयुक्त थ्रेड्स (ए) के संसाधन उपयोग को संतुलित करने की आवश्यकता है (बी)।
(ए) आम तौर पर स्मृति उपयोग (ढेर और इतने पर) है क्योंकि कोई काम नहीं कर रहा एक धागा सीपीयू का अधिक उपयोग नहीं करेगा। (बी) आम तौर पर अनुरोधों के प्रसंस्करण में देरी के रूप में वे आने के रूप में आप एक धागा उपलब्ध होने के लिए इंतजार करने की जरूरत है।
इसलिए तुम नाप लो। जैसा कि आप कहते हैं, आपके थ्रेड्स का अधिकांश हिस्सा डेटाबेस से प्रतिक्रिया के लिए इंतजार कर रहा होगा, इसलिए वे नहीं चलेंगे। दो कारक हैं जो प्रभावित करते हैं कि आपको कितने धागे की अनुमति देनी चाहिए।
पहला DB कनेक्शन की संख्या उपलब्ध है। यह एक कठिन सीमा हो सकती है जब तक कि आप इसे डीबीएमएस में नहीं बढ़ा सकते हैं - मुझे लगता है कि आपका डीबीएमएस इस मामले में असीमित संख्या में कनेक्शन ले सकता है (हालांकि आपको आदर्श रूप में अच्छी तरह से मापना चाहिए)।
फिर, आपके ऐतिहासिक उपयोग के लिए आपको कितने थ्रेड्स पर निर्भर होना चाहिए। आपके पास चलने वाला न्यूनतम न्यूनतम संख्या है जिसे आपने कभी भी + A% चलाया है, एक पूर्णतम उदाहरण के साथ (उदाहरण के लिए, और इसे A की तरह ही कॉन्फ़िगर करने योग्य है) 5।
धागे की अधिकतम संख्या आपके ऐतिहासिक अधिकतम + बी% होनी चाहिए।
आपको व्यवहार परिवर्तन के लिए भी निगरानी रखनी चाहिए। यदि, किसी कारण से, आपका उपयोग एक महत्वपूर्ण समय के लिए उपलब्ध 100% तक चला जाता है (ताकि यह ग्राहकों के प्रदर्शन को प्रभावित करे), तो आपको अधिकतम अनुमत को टक्कर देना चाहिए जब तक कि यह एक बार फिर से बी% अधिक न हो।
"वास्तव में मुझे क्या मापना चाहिए?" के जवाब में। सवाल:
आपको जो विशेष रूप से मापना चाहिए, वह है लोड के तहत समवर्ती उपयोग में धागे की अधिकतम मात्रा (उदाहरण के लिए, डीबी कॉल से वापसी पर प्रतीक्षा करना)। फिर उदाहरण के लिए 10% का सुरक्षा कारक जोड़ें (जोर दिया गया है, क्योंकि अन्य पोस्टर मेरे उदाहरणों को निश्चित सिफारिशों के रूप में लेते हैं)।
इसके अलावा, ट्यूनिंग के लिए उत्पादन वातावरण में यह किया जाना चाहिए। पहले से अनुमान लगाना ठीक है लेकिन आपको कभी नहीं पता होगा कि उत्पादन किस तरह से आपके कदम चूमेगा (यही वजह है कि इन सभी चीजों को रनटाइम में कॉन्फ़िगर किया जाना चाहिए)। यह एक ऐसी स्थिति को पकड़ने के लिए है, जिसमें आने वाले क्लाइंट कॉल की अप्रत्याशित दोहरीकरण है।