मैं जेवीएम मेमोरी की उचित तरीके से निगरानी कैसे कर सकता हूं?


9

मैं सोच रहा हूँ कि हम व्यस्त समय में भी उत्पादन वातावरण में कम ओवरहेड तरीके से जेवीएम मेमोरी मॉनिटर कैसे करते हैं।

मान लीजिए कि मेरे पास उत्पादन में दो टॉमकैट ऐप सर्वर हैं, उनके पीछे लोड संतुलन स्थापित किया गया है। अगर मैं jvm मेमोरी के आँकड़े देख सकता हूँ तो मैं सर्वर पर रिक्वेस्ट भेजने से रोकने के लिए लोड बैलेंस बता सकता हूँ जो OOM समस्या का सामना करेगा। क्या यह समझ में आता है? Jconsole या VisualVM अधिक प्रदर्शन खाता है मेरी पसंद नहीं है।


जावा साइमन ढांचा एक नज़र लायक हो सकता है।
khmarbaise

संभव डुप्लिकेट - stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat
jasonk

जवाबों:



1

अन्य लोगों ने स्मृति उपयोग की निगरानी के बारे में सुझाव दिए हैं ...

मान लीजिए कि मेरे पास उत्पादन में दो टॉमकैट ऐप सर्वर हैं, उनके पीछे लोड संतुलन स्थापित किया गया है। अगर मैं jvm मेमोरी के आँकड़े देख सकता हूँ तो मैं सर्वर पर रिक्वेस्ट भेजने से रोकने के लिए लोड बैलेंस बता सकता हूँ जो OOM समस्या का सामना करेगा। क्या यह समझ में आता है?

की तरह। लेकिन यह जरूरी नहीं है कि आपकी समस्या का समाधान हो।

समस्या की जड़ को वापस देता है ... OOMEs। टॉमकैट के संदर्भ में, OOME के ​​निम्न में से किसी एक के कारण होने की संभावना है:

  • स्मृति आपके अनुप्रयोग में लीक होती है, (या संभवत: टॉमकैट ही),
  • प्रत्येक टॉमकैट पर समानांतर में बहुत अधिक अनुरोधों को संसाधित करने का प्रयास करना, या
  • व्यक्तिगत अनुरोध जिन्हें प्रसंस्करण के दौरान बहुत अधिक मेमोरी की आवश्यकता होती है।

अपनी समस्या को हल करने के लिए, आपको सबसे पहले यह पता लगाने की जरूरत है कि इनमें से क्या हो रहा है ... क्योंकि समाधान उनमें से प्रत्येक के लिए अलग है।

1) यह देखने के लिए कि क्या यह मेमोरी लीक है, आपको दीर्घकालिक मेमोरी उपयोग पैटर्न की जांच करने के लिए मेमोरी विश्लेषण टूल का उपयोग करने की आवश्यकता है। यह संभवतः एक आरा पैटर्न दिखाएगा ... जो सामान्य है। आपको जो देखने की जरूरत है वह "दांतों" के बॉटम्स का स्तर है जो समय के साथ ऊपर की ओर बढ़ता है। यह इंगित करता है कि कुछ कचरा पैदा कर रहा है जिसे एकत्र नहीं किया जा सकता है; यानी स्मृति रिसाव।

यदि आपके पास मेमोरी लीक है, तो सबसे अच्छा समाधान यह पता लगाना है कि आपके कोड का कौन सा हिस्सा जिम्मेदार है, और इसे ठीक करें। कुछ भी ... लोड बैलेंसिंग सहित ... एक बैंडडेड समाधान है और ट्रैक के नीचे बदतर समस्याओं को जन्म दे सकता है।

2) स्मृति लीक को समाप्त करने के बाद, आपको यह पता लगाने की आवश्यकता है कि क्या समस्या यह है कि आप एक ही बार में कई अनुरोधों को संसाधित कर रहे हैं। मुझे ऐसा करने का सबसे अच्छा तरीका यकीन नहीं है, लेकिन अगर यह समस्या है (या आपको संदेह है) तो कुछ संभावित कारण हैं:

  • वर्कर थ्रेड की संख्या को कम करने के लिए टॉमकैट सर्वर कॉन्फ़िगरेशन को समायोजित करें।

  • यदि आपके अनुरोध I / O बाध्य हैं, तो एक और संभावना सर्विलेंस अनुरोध को देखने के लिए होगी जो सर्वलेट के हाल के संस्करणों में उपलब्ध समर्थन को संभाल रहा है - http://docs.oracle.com/javaee/7/tutorial/doc/ देखें servlets012.htm । लेकिन वह और काम होगा।

3) यदि समस्या यह बताती है कि कुछ अनुरोध बहुत अधिक मेमोरी का उपयोग कर रहे हैं, तो आपको यह पता लगाने की आवश्यकता है कि हाथ से पहले उन अनुरोधों का पता कैसे लगाया जाए और "उनके साथ व्यवहार करें"। इन अनुरोधों का पता लगाना और उनसे निपटना दोनों ही मुश्किल हो सकता है ... और आपके आवेदन के विवरण के बिना सलाह देना कठिन है। लेकिन व्यावहारिक समाधान के एक जोड़े हैं:

  • किसी अन्य सर्वर के लिए एक बड़े ढेर के साथ अन्य अनुरोधों को अग्रेषित करें ... जहां OOME "सामान्य" अनुरोधों के साथ हस्तक्षेप नहीं करेंगे।

  • ढेर का आकार बढ़ाएँ। यदि आपके पास पर्याप्त भौतिक स्मृति है, तो एक बड़े ढेर के साथ चलने से वास्तव में आपके टॉमकैट सर्वर को अधिक कुशल बनाया जा सकता है ... साथ ही ओओएम से बचा जा सकता है।


सारांश में, ओओएम से बचने के लिए संतुलन लोड करने की कोशिश करने के बजाय, मैं आपको सुझाव देता हूं कि आपको OOME क्यों मिल रहा है ... और सीधे OOME के ​​कारण से निपटने का प्रयास करें।


0

शायद jvmtop आपके लिए देखने लायक है।

यह आपको मेमोरी खपत, सीपीयू उपयोग, थ्रेड काउंट्स आदि जैसे प्रति-जेवीएम आधार निगरानी मैट्रिक्स पर "टॉप-लाइक" तरीके से दिखाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.