2012-06-24 15 views
13

हम एक वेब अनुप्रयोग जावा 6, बिलाव 6, स्प्रिंग फ्रेमवर्क 3 चल रहा है, हाइबरनेट 4, ehcache है। हमें बहुत लंबे समय तक कचरा संग्रहण समय के साथ समस्या है जिसमें आवेदन को उत्तरदायी छोड़ने में 30 सेकंड या उससे अधिक समय लग सकता है।अत्यंत लंबे कचरा संग्रहण बार

हम परीक्षण में वर्तमान में लेकिन अलग स्पष्ट से कर रहे हैं: अधिक स्मृति जोड़ने के लिए, मैं सोच रहा था अगर वहाँ पहलुओं हम कम करने के लिए कर सकता है धुन कचरा संग्रहण समय कर रहे हैं।

स्मृति उपयोग करने के लिए प्रमुख योगदान ehcache के रूप में हम आक्रामक तरीके से कैशिंग कर रहे हैं। लेकिन मुझे हमेशा EHCache स्टोर्स (नए एएचकेएसी बाइट आकार के स्टोर का आकार देने में कठिनाई होती है, जो हमारे साथ सभी प्रकार की समस्याओं का कारण बनती है क्योंकि कैश्ड ऑब्जेक्ट ग्राफ़ काफी बड़े हो सकते हैं)।

ये JVM

JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx704m XX:OnOutOfMemoryError=/usr/share/scripts/on_server_crash.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat6 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC 
+0

आप इन लंबे समय के स्मृति से पहले 704MB की अधिकतम तक पहुँचने मिलता है? उपयोग की गई स्मृति को बढ़ाने का निर्णय लेने से पहले जेवीएम प्रयुक्त स्मृति को कम करने की कोशिश में थोड़ा सा आक्रामक हो सकता है (और संभावित रूप से इसे स्थानांतरित कर सकता है)। यदि आप -Xms704m -Xmx704m का उपयोग करते हैं तो यह वही व्यवहार करता है? –

+0

"jstat -gc 1s pid" का उपयोग करके आप देख सकते हैं कि आपकी मेमोरी उपयोग नर्सरी को हिट करती है या नर्सरी, ईडन और बूढ़े के बीच मेमोरी आवंटन बदला जाना चाहिए। –

+1

जेपीरोडाइलर/योरकिट के साथ आपको आवेदन करने के लिए संक्षिप्त, आपके पास कोई ठोस सुझाव नहीं है। –

उत्तर

3

के लिए अपनी सेटिंग्स हैं जीसी समय को कम करने के लिए, सबसे अच्छी बात आप कर सकते हैं ढेर स्मृति बंद का उपयोग करें। यदि आप जितना संभव हो उतना बड़ा डेटा स्थानांतरित कर सकते हैं तो आप अपने पूर्ण जीसी समय को 10 मिलीलीटर सेकेंड तक कम कर सकते हैं, यहां तक ​​कि एमबी ऑफ ऑफ हेप मेमोरी के 100 एमबी के साथ भी। मेरा मानना ​​है कि हेप डेटा स्टोर्स से एशैच समर्थन का समर्थन करता है, लेकिन अगर ऐसा नहीं होता है या आप इसका उपयोग नहीं कर सकते हैं तो मेरा सुझाव है कि आप उन विकल्पों को देखें जो करते हैं।

को देखते हुए आप केवल एक 700 MB अधिकतम स्मृति आकार ऐसा लगता है आप बहुत सीमित स्मृति के साथ एक सर्वर पर चल रहे हैं। अन्यथा मैं सुझाव दूंगा कि आप अधिकतम 8 या 16 जीबी से शुरू करें और स्मृति आकार को कम करें यदि आपको लगता है कि आपको वास्तव में इसकी आवश्यकता नहीं है।

+0

जीसी टाइम्स में मेमोरी आकार कोई मुद्दा नहीं होना चाहिए। जीसी शुरू होने से पहले बनाई गई वस्तुओं की केवल संख्या। – user2763361

+1

@ user2763361 ऑब्जेक्ट्स की संख्या बहुत महत्वपूर्ण है और संदर्भों की एचटीई संख्या जैसे अन्य कारक और कौन सा पीढ़ी उन संदर्भों को जाता है, लेकिन यह आकार है जो आप उपकरणों की निगरानी में देख सकते हैं।यदि आप उपभोग की गई स्मृति को कम करते हैं तो आप प्रदर्शन में सुधार कर सकते हैं क्योंकि इसका आमतौर पर वस्तुओं की संख्या और संदर्भ संकेत की मात्रा को कम करने का मतलब है। संक्षेप में, आप सही हैं, लेकिन स्मृति उपयोग मापने के लिए आसान है। –

+0

अच्छी तरह से कहा। संबंधित: http://stackoverflow.com/questions/21675709/how-to-find-which-objects-are-creating-the-most-garbage – user2763361

1

सचाई लोगों से एक उत्कृष्ट उपकरण है। इस लिंक और उनके पास त्वरित उदाहरण देखें। Foursquare Heap tool.। उपरोक्त उल्लिखित उपकरणों में से किसी एक में निदान के आधार पर, समस्या को हल करने के लिए सबसे अधिक हल किए गए समाधान या तो आपके सीपीयू प्रोसेसर में अधिक रैम जोड़ने या बिजली जोड़ने के लिए होगा। यदि आप कुछ बुनियादी ढांचे में बदलाव के लिए खुले हैं तो Zing from Azul Systems देखें। लेकिन मुझे लगता है कि दूसरा विकल्प एक खिंचाव हो सकता है।

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