पहला कदम यह है कि इस प्रकार की समस्या का कारण क्या हो सकता है। चूंकि यह कोड के वर्गों के लिए सही भाषा का चयन करने से संबंधित है, निम्नलिखित पर विचार करके शुरू करें:
- भाषा का पता कैसे लगाया जाता है? क्या यह HTTP अनुरोध की जानकारी पर आधारित है? क्या यह सत्र की जानकारी पर आधारित है ?, या यह डेटाबेस क्षेत्रों पर आधारित है? संक्षेप में, क्या यह संबंधित समस्या हो सकती है कि आप प्रत्येक अनुभाग के लिए भाषा का चयन कैसे करते हैं?
- भाषा को कैसे प्रदर्शित किया जाता है? क्या आप एक गुण फ़ाइल, या डेटाबेस से खींच रहे हैं? क्या यह संभव है कि सही भाषा का संदर्भ कुछ खो रहा है? क्या भाषा में मिली जुली आप साइट के लिए हमेशा डिफ़ॉल्ट होते हैं?
- क्या ग्राहक पर्यावरण से कोई संबंध है? यह पहली गोली से संबंधित है, लेकिन थोड़ा आगे बढ़ता है। मैं डाउनस्ट्रीम कैशिंग परदे के पीछे अजीब प्रतिपादन समस्याओं था। आमतौर पर उन प्रकार की समस्याएं एक संपूर्ण पृष्ठ होती हैं जो एक व्यक्ति के पृष्ठ को अन्य उपयोगकर्ताओं के लिए बासी या परोसती है (जो शर्मनाक था)।
- क्या आप थ्रेड स्थानीय मान का उपयोग कर रहे हैं? यदि एक अनुरोध मेरे एक से अधिक थ्रेड को संभाला जाता है, तो थ्रेड स्थानीय मान में थ्रेड के आधार पर अलग-अलग जानकारी होगी जो उस समय काम कर रही है। एक वेब सर्वर वातावरण में, आप यह नहीं मान सकते हैं कि जिस थ्रेड पर आपने प्रोसेसिंग शुरू की थी, वही धागा होगा जिस पर आप पूरी प्रोसेसिंग करते हैं - जब तक कि वह आपके प्लेटफॉर्म के लिए कल्पना का हिस्सा न हो। सर्वर लेखकों ने पाया है कि यदि वे थ्रेड्स में एक छोटे से पूल और मल्टीप्लेक्स काम का पुन: उपयोग करते हैं, तो वे एक साथ अधिक अनुरोधों को संभाल सकते हैं। यहां तक कि अगर आपके पास एक अनुरोध के अंत तक एक धागा है, तो सर्वर उसी समय उस धागे पर अन्य अनुरोधों को गुणा कर सकता है। थ्रेड लोकल के बजाय, उस मूल्य को अनुरोध या सत्र विशेषताओं के लिए बाध्य करने पर विचार करें।
अब, एक बार आप विशेषता गए संभावनाओं क्या गलत हो सकता है, यह के समय सुनिश्चित करें कि आप डेटा आप कोशिश करते हैं और पता लगाने के लिए क्या करने की जरूरत है बनाने के लिए किया था जाने गलत।
- समस्या क्षेत्रों के आसपास विपुल लॉगिंग का उपयोग करें। यह एक ऐसी जगह है जहां Log4J या Log4Net जैसे उपकरण वास्तव में चमक सकते हैं। वह लॉगिंग ढाँचा, और उसके जैसे अन्य, आपको किसी अन्य चीज़ के लिए शोर को कम करते हुए कुछ श्रेणियों के लिए लॉगिंग को चालू करने की अनुमति देता है - सभी एक कॉन्फ़िगरेशन फ़ाइल को बदलकर। यदि आप संदेह करते हैं तो संभवतः समस्या हो सकती है, यह पता लगाने के लिए आप नए लॉगिंग स्टेटमेंट को प्रस्तुत करना चाहते हैं। यह भी सुनिश्चित करें कि आपके HTTP एक्सेस लॉग में वह सभी जानकारी है जो आप प्रत्येक अनुरोध के बारे में चाहते हैं (कुकीज़, http हैडर पैरामीटर, आदि)।
- समस्या का अनुकरण करने का प्रयास। चूंकि यह छिटपुट रूप से होता है, उस समय सर्वर पर लोड कितना होता है? क्या आप भाषाओं के मिश्रण से एक साथ कई अनुरोधों से प्रभावित हो रहे हैं? यदि हां, तो अपने परीक्षण वातावरण में उस तरह के भार का अनुकरण करने का प्रयास करें। JMeter के समान एक उपकरण वह हो सकता है जिसकी आपको आवश्यकता है। आप अपने नकली ग्राहकों के लिए आईपी पते को बिगाड़ने में सक्षम होना चाहते हैं। याद रखें कि आईपी पते को अलग कर दिया जाता है ताकि आप यह पता लगा सकें कि पता के पहले दो खंडों के आधार पर आईपी किस देश / क्षेत्र में है।
- समस्या आपके परीक्षण वातावरण में छिटपुट के रूप में होगी, लेकिन जैसा कि आप अपने वास्तविक कारण में संकीर्ण हो जाते हैं, आप परिणामों को तिरछा कर सकते हैं ताकि यह अधिक बार ऐसा हो सके जैसे कि यह जंगली में होता है। इसके अतिरिक्त, आप लॉग फ़ाइलों की अधिक आसानी से समीक्षा कर सकते हैं और उनसे सीखने का प्रयास कर सकते हैं।
- यह एक पुनरावृत्त प्रक्रिया है, इसलिए धैर्य रखें। आपको लगता है कि बग के प्रकार को पुन: उत्पन्न करने के लिए आपको प्रेरित करना होगा, लॉग की जांच करें, और जो आप पाते हैं उसके आधार पर अपने परीक्षणों को परिष्कृत करें। महत्वपूर्ण बात समस्या की पहचान करना है , इसलिए कुछ सरल सुधार करने के लिए आग्रह का विरोध करें जो केवल वास्तविक समस्या को कम अक्सर बना सकते हैं।
अंत में, एक बार जब आप समस्या को उस बिंदु तक सीमित कर देते हैं, जहां आप जानते हैं कि इसे कैसे पुन: उत्पन्न करना है, और इसके कारण क्या हैं, तो कोड में समस्या को मजबूर करने के लिए सबसे छोटा स्वचालित परीक्षण लिखें। यदि आपने समस्या को एक कक्षा तक सीमित कर दिया है, या एक जोड़ी कक्षाएं सही ढंग से काम नहीं कर रही हैं, तो उस स्तर पर इसे पुन: प्रस्तुत करें। आपको इसे करने के लिए 100 थ्रेड स्पान नहीं करने चाहिए, बस सबसे छोटा परीक्षण करना चाहिए जिससे समस्या 100% हो सकती है।
अब आप इसे ठीक कर सकते हैं, और उचित रूप से आश्वस्त रहें कि यह आपको फिर से काटने के लिए वापस नहीं आएगा।