2009-04-03 19 views
16

मुझे एक ग्रेल्स एप्लिकेशन मिला है जो डोमेन ऑब्जेक्ट सृजन और विनाश की काफी सभ्य राशि करता है, और ऐसा लगता है कि परमजेन स्पेस बहुत ही तेज दर से बाहर निकलता है। मैंने सामान्य बदलाव किए हैं (पर्मगेन को 256 एम, सक्षम वर्ग जीसी इत्यादि), लेकिन कोई पासा नहीं किया है।समस्या निवारण Grails/ग्रोवी स्मृति रिसाव?

क्या कोई ग्रोवी और/या जावा में इस प्रकार की मेमोरी खपत की समस्या निवारण के लिए कुछ (और उम्मीद है कि मुफ्त या बहुत कम लागत वाले) टूल की सिफारिश करने की देखभाल करेगा? या जेवीएम मेमोरी समस्याओं का निवारण करने के लिए आप उपयोग की जाने वाली कुछ तकनीकों का उपयोग करते हैं?

संपादित करें: यह तब होता है जब एप्लिकेशन को उत्पादन मोड में टोमकैट के अंदर तैनात किया जाता है; मैंने अन्य कंटेनर के साथ कोशिश नहीं की है। फिर भी, समस्या को ट्रैक करने के लिए कुछ संसाधन होना अच्छा लगेगा।

+2

कैसे आप अपनी समस्या का समाधान अंत किया?हम खोजने योग्य और क्वार्ट्ज (अन्य प्लगइन के बीच) का उपयोग करते हैं और हमारे अनुरोध को बहुत अधिक अनुरोध के साथ हमारे PERMGEN अंतरिक्ष उपयोग में वृद्धि देखते हैं। – hvgotcodes

उत्तर

1

YourKit एक अच्छा टूल है जिसे मैंने स्मृति समस्याओं का निदान करने के लिए कई बार उपयोग किया है। यह वाणिज्यिक है, लेकिन इसमें एक-शॉट डीबगिंग के लिए एक मुफ्त मूल्यांकन संस्करण उपलब्ध है।

1

क्या आप विकास या उत्पादन में होने वाली समस्या का सामना कर रहे हैं?

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

http://www.grails.org/FAQ#Q:%20OMG%20I%20get%20OutOfMemoryErrors%20or%20PermGen%20Space%20errors%20when%20running%20Grails%20in%20development%20mode.%20What%20do%20I%20do से बंद कर सकते हैं?

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

आप ओरेकल के जेरॉकिट जैसे जेवीएम के एक अलग कार्यान्वयन को भी आजमा सकते हैं, जिसे कचरा संग्रह और दक्षता के अन्य साधनों में काफी बेहतर माना जाता है। मैंने इसे कभी भी कोशिश नहीं की है, लेकिन चूंकि मैं भी विकासशील और व्यापक ग्रेल्स परियोजना के बीच में हूं, इसलिए मैं इन समस्याओं के लिए शॉपिंग समाधान कर सकता हूं। सौभाग्य!

+0

जेआरॉकिट एक ओरेकल उत्पाद http://www.oracle.com/technology/software/products/jrockit/index.html –

+0

मैं टॉमकैट (6.0.18) पर उत्पादन मोड में चल रहा हूं, और वास्तव में नहीं JVM के बारे में एक विकल्प है। –

+0

मैंने पढ़ा है कि वेब कंटेनर में कचरा संग्रह वाली समस्याओं में से एक यह है कि कंटेनर पुनरारंभ होने पर स्टैक केवल वास्तव में ताज़ा होता है। (कंटेनर को पुनरारंभ करें टॉमकैट सेवा को पुनरारंभ करने के बराबर है, न केवल एक वेब अनुप्रयोग को पुनरारंभ करना।) –

2

Eclipse Memory Analyzer एक निःशुल्क उपकरण है जो कम से कम आपकेकिट के रूप में अच्छा है।

6

मुझे व्यक्तिगत रूप से VisualVM पसंद है। निश्चित रूप से चारों ओर अधिक शक्तिशाली उपकरण हैं, लेकिन इसने एक अच्छा उपयोगिता-से-पावर अनुपात प्राप्त किया है।

0

यदि आपके आवेदन को फिर से तैनात करने के बाद ऐसा होता है तो कई बार आप this Grails bug से प्रभावित हो सकते हैं। Tomcat FAQ पर भी पर्मजेन लीक के लिए कई संभावित कारण हैं।

+0

मुझे वास्तव में लगता है कि यह मूल समस्या है (ऐप जेटी में ठीक चलता है), लेकिन यहां तक ​​कि मैं एक अच्छा संसाधन चाहता हूं इस तरह के डिबगिंग करने के लिए आगे बढ़ रहे हैं। –

10

आप

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

की कोशिश की है?

साथ में हमारी उत्पादन बिलाव, जो ऐप का परिनियोजन के बाद बहुत जल्द हुई थी पर हमेशा की तरह संदिग्ध (-Xmx, -Xms, -XX:PermSize और -XX:MaxPermSize) इस का समाधान सभी PermGen मुद्दों में वृद्धि के साथ। उसके बाद एक और ओओएम-अपवाद कभी नहीं देखा। :-)

+1

इस समाधान के साथ कोई प्रदर्शन संबंधित मुद्दों? हम कई पुनरावर्ती नौकरियों के साथ खोजने योग्य, ऑडिटेबल और क्वार्ट्ज प्लगइन का उपयोग कर रहे हैं और हर सप्ताह एक पर्मजेन ओओएम प्राप्त करते हैं ... – hvgotcodes

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