2013-04-18 5 views
5

मैं AppDynamics के साथ एक उत्पादन प्रणाली की निगरानी कर रहा हूं और हमारे पास सिस्टम को क्रॉल में धीमा कर दिया गया था और लगभग फ्रीज हो गया था। इस घटना से ठीक पहले, ऐपडिनेमिक्स कई मिनटों के लिए सभी जीसी गतिविधि (मामूली और प्रमुख समान) फ्लैटलाइन दिखा रहा है ... और फिर जीवन में वापस आ गया।क्या ओएस जावा प्रक्रिया को कचरा संग्रहण से रोक सकता है?

सिस्टम पर अल्ट्रा लो लोड की अवधि के दौरान भी, हम अभी भी हमारे JVMs कुछ जीसी गतिविधि कर रहे हैं। हमने इसे पूरी तरह से फ्लैटलाइन नहीं किया है और 0

भी - नेटवर्क I/O जीसी/मेमोरी फ्लैटलाइन के समान समय पर फ्लैटलाइन किया गया है।

तो मैं पूछता हूं: क्या सिस्टम स्तर पर कुछ जेएमवी को फ्रीज करने का कारण बन सकता है, या इसके कचरा संग्रह को लटका/फ्रीज कर सकता है? यह एक CentOS मशीन पर है।

+0

_ "सिस्टम क्रॉल में धीमा हो जाता है और लगभग फ्रीज हो जाता है" _ क्या स्मृति मेमोरी है? – phil

+0

हाँ मुझे पता है कि यह इस तरह लगता है, लेकिन हम समय के साथ उपलब्ध स्मृति की मात्रा को कम कर देंगे, जो हम नहीं करते हैं। निश्चित रूप से एक अच्छा विचार हालांकि। –

+0

मैंने कुछ ऐसा देखा है जैसा कि आप पहले वर्णन करते हैं क्योंकि वक्तव्य वस्तुओं को कभी बंद नहीं किया गया था, और थोड़ी देर के बाद, ढेर भर गया। VisualVM का उपयोग करें या जो भी टूल आप यह जांचना चाहते हैं कि अधिकांश मेमोरी का क्या उपयोग करता है और देखें कि यह बढ़ता रहता है या नहीं। – phil

उत्तर

0

क्या आपके ओएस ने स्वैपिंग सक्षम की है।

मैंने जावा के साथ बड़ी समस्याएं देखी हैं, जब यह एक ओएस पर सभी रैम को सक्षम करने के साथ सक्षम हो जाता है - यह वास्तव में विंडोज सिस्टम को विचलित कर देगा, प्रभावशाली ढंग से उन्हें लॉक कर देगा और रीबूट कर देगा।

  • ओएस राम पूर्ण के पास हो जाता है:

    मेरे सिद्धांत यह है।

  • ओएस जावा से वापस स्मृति का अनुरोध करता है।
  • यह स्मृति को रिलीज करने का प्रयास करने के लिए जावा को एक पूर्ण जीसी में ट्रिगर करता है।
  • पूर्ण जीसी वीएम स्मृति के लगभग हर टुकड़े को छूता है, यहां तक ​​कि उन वस्तुओं को भी बदल दिया गया है।
  • सिस्टम वीएम के लिए डेटा को वापस मेमोरी करने की कोशिश करता है (एक सिस्टम जो पहले से ही राम से बाहर है)
  • यह स्नोबॉलिंग रखता है।

सबसे पहले यह सिस्टम को बहुत अधिक प्रभावित नहीं करता है, लेकिन यदि आप एक ऐप लॉन्च करने का प्रयास करते हैं जो स्मृति का एक गुच्छा चाहता है तो यह वास्तव में लंबा समय ले सकता है, और आपका सिस्टम बस खराब हो रहा है।

एकाधिक बड़े वीएम इसे और भी खराब कर सकते हैं, मैं 3 या 4 विशाल चलाता हूं और जब मैं 60-70% रैम उपयोग प्राप्त करता हूं तो अब मेरी प्रणाली को घेरना शुरू हो जाता है।

यह अनुमान है लेकिन यह परीक्षण के दिनों के बाद मैंने जो व्यवहार देखा है उसका वर्णन करता है।

प्रभाव यह है कि सभी स्वैपिंग जीसी को "रोकें" लगती हैं। अधिक सटीक रूप से ओएस जीसी समय स्वैपिंग का अधिकतर खर्च कर रहा है जो ऐसा लगता है कि जीसी के दौरान कुछ भी नहीं कर रहा है।

एक फिक्स-सेट -एक्सएमएक्स कम मूल्य पर, इसे तब तक छोड़ दें जब तक आप पर्याप्त कमरे को स्वैपिंग से बचने की अनुमति न दें। यह हमेशा मेरी समस्या को ठीक करता है, अगर यह आपकी समस्या को ठीक नहीं करता है तो मैं आपकी समस्या के कारण के बारे में गलत हूं :)

+0

एक ओएस एक प्रक्रिया से स्मृति को वापस कैसे पूछ सकता है? – user93353

+0

मेरा मानना ​​है कि ओएस कम स्मृति की स्थिति को संकेत दे सकता है, लेकिन मुझे कोई संदर्भ नहीं मिल रहा है।मैं गलत हो सकता हूं लेकिन प्रभाव के रूप में वर्णित है - अगर जावा जावा रैम को उठा रहा है तो कितना स्वैप उपलब्ध है, इस पर ध्यान दिए बिना सिस्टम रम से बाहर निकलने के बाद बंद हो जाता है। मैंने इसे लिनक्स में देखा है लेकिन यह विंडोज़ पर बहुत अधिक स्पष्ट है। जब मेरे पास मेरा-एक्सएमएक्स गलत था, तो मुझे राम मशीन को दबाते समय अपनी मशीन को रीबूट करना पड़ा। इसके अलावा जीसी इस समय के दौरान रुकता प्रतीत होता है क्योंकि ओएस अपने सभी समय स्वैपिंग खर्च कर रहा है (जो टिकटमोंस्टर वर्णित है।) –

+0

इस सिग्नल के बारे में क्या? http://msdn.microsoft.com/en-us/library/windows/desktop/aa366541(v=vs.85).aspx यदि जावा इसका जवाब देता है, तो यह व्यवहार के बारे में बताएगा जैसा मैंने वर्णन किया है। –

1

अधिक जानकारी के बिना आपकी समस्या का सही कारण खोजना वास्तव में मुश्किल है।

लेकिन मैं आपके प्रश्न का उत्तर देने का प्रयास कर सकता हूं:
क्या ओएस कचरा संग्रह को अवरुद्ध कर सकता है?
यह आपके ओएस थ्रेड कचरा कलेक्टर को अवरुद्ध करने की तुलना में बहुत ही असंभव है और अन्य धागे को चलाने दें। आपको उस तरह की जांच नहीं करनी चाहिए।

क्या ओएस जेवीएम को अवरुद्ध कर सकता है?
हां यह perflecty कर सकते हैं और यह बहुत कुछ कर सकते हैं, लेकिन आप से भी तेज़ लगता है कि प्रक्रियाएं एक ही समय में चल रही हैं।
जेवीएम एक जैसी प्रक्रिया है और वह ओएस के नियंत्रण में है। आपको एप्लिकेशन द्वारा उपयोग किए जाने वाले सीपीयू को लटकते समय जांचना होगा (सर्वर पर निगरानी के साथ जेवीएम में नहीं)। यदि यह बहुत कम है तो मैं 2 कारणों को देखने के (लेकिन वहाँ अधिक कर रहे हैं):

  • आपके सर्वर पर्याप्त रैम नहीं है और अदला-बदली कर रहा है (रैम < -> डिस्क), प्रक्रिया बेहद धीमी गति से हो जाता है। इस मामले में सीपीयू सर्वर पर उच्च होगा लेकिन jvm
  • अन्य प्रक्रिया या सर्वर संसाधनों को पकड़ लेता है और आपके एप्लिकेशन या सर्वर को कुछ भी प्राप्त नहीं होता है। CentO पर प्राथमिकता की जांच करें।
0

सिद्धांत रूप में, हाँ, यह कर सकता है। लेकिन यह अभ्यास करता है, यह कभी नहीं करना चाहिए।

अधिकांश जावा वर्चुअल मशीनों में, अनुप्रयोग थ्रेड चलने वाले एकमात्र थ्रेड नहीं होते हैं। आवेदन धागे के अलावा, संकलन धागे, फाइनलाइज़र धागे, कचरा संग्रह धागे, और कुछ और हैं। मशीन पर चल रहे अन्य प्रोग्राम्स से सीपीयू कोर आवंटित करने के लिए निर्णय लेने और मशीनों पर चल रहे अन्य कार्यक्रमों के अन्य धागे कई मानकों (थ्रेड प्राथमिकताओं, उनके अंतिम निष्पादन समय इत्यादि) पर आधारित होते हैं, जो सभी धागे के लिए उचित प्रयास करते हैं। तो, व्यावहारिक रूप से सिस्टम में कोई थ्रेड सीपीयू आवंटन के लिए एक अनुचित लंबे समय के लिए इंतजार कर रहा है और ऑपरेटिंग सिस्टम को किसी भी थ्रेड को असीमित समय के लिए अवरुद्ध नहीं करना चाहिए।

कचरा संग्रह धागे (और अन्य वीएम धागे) को कम से कम गतिविधि की आवश्यकता है। एक कचरा संग्रह की आवश्यकता है या नहीं, यह देखने के लिए उन्हें समय-समय पर जांच करने की आवश्यकता है। यहां तक ​​कि यदि आवेदन धागे सभी निलंबित कर दिए गए हैं, तो अन्य वीएम धागे भी हो सकते हैं, जैसे कि जेआईटी कंपाइलर थ्रेड या फाइनेंजर थ्रेड, जो काम करते हैं और इसलिए, ऑब्जेक्ट आवंटित करते हैं और कचरा संग्रह ट्रिगर करते हैं।यह मेटा-सर्कुलर जेवीएम के लिए विशेष रूप से सच है जो जावा में वीएम थ्रेड को लागू करता है और सी/सी ++ में नहीं;

इसके अलावा, अधिकांश आधुनिक जेवीएम एक पीढ़ी के कचरा कलेक्टर (एक कचरा कलेक्टर का उपयोग करते हैं जो ढेर के अलग-अलग हिस्सों में विभिन्न आयुओं के साथ वस्तुओं को रखता है) इसका मतलब है कि वस्तुएं पुराने और बूढ़े हो जाती हैं, उन्हें अन्य पुरानी जगहों पर ले जाया जा सकता है। इसलिए, यदि वस्तुओं को इकट्ठा करने की कोई आवश्यकता नहीं है, तो एक पीढ़ी का कचरा कलेक्टर वस्तुओं को एक स्थान से दूसरे स्थान पर ले जा सकता है।

बेशक प्रत्येक कचरा कलेक्टर का विवरण जेवीएम से जेवीएम में अलग है। चोट पर अधिक नमक डालने के लिए, कुछ जेवीएम एक से अधिक प्रकार के कचरा कलेक्टर का समर्थन करते हैं। लेकिन एक निष्क्रिय आवेदन में न्यूनतम कचरा संग्रहण गतिविधि को देखते हुए कोई आश्चर्य नहीं है।

संबंधित मुद्दे