2013-01-23 12 views
6

के लिए मेमोरी उपयोग को समझना मेरे पास एक जेटी सर्वर है जिसका उपयोग मैं एक ऐप के लिए वेबस्केट कनेक्शन के लिए करता हूं जिस पर मैं काम कर रहा हूं। एकमात्र मुद्दा यह है कि जेटी बहुत अधिक वर्चुअल मेमोरी (2.5 जीबी वर्चुअल मेमोरी) और लगभग 650RES का उपभोग कर रही है।जेटी

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

क्या आपके पास यह समझने के लिए कोई सुझाव है कि 12 जीबी खपत कहां से आ रही है और सर्वर के साथ मेमोरी लीक या किसी अन्य समस्या को कैसे समझें?

मैं वर्चुअल मेमोरी द्वारा मेरा मतलब समझना चाहता था (क्योंकि मेरी समझ गलत हो सकती है)। जब मैं शीर्ष पर चलता हूं तो वर्चुअल मेमोरी "वीआईआरटी" होती है। यहां मुझे यह मिलता है:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND           
-------------------------------------------------------------           
9442 root 20 0 12.6g 603m 10m S 0 1.3 1:50.06 java 

धन्यवाद!

+0

जेटी का कौन सा संस्करण? –

+0

जोकिम, मैं 8.1.7.v20120910 – user220755

+0

का उपयोग कर रहा हूं लंबे कुल मेमरी = Runtime.getRuntime()। कुल मेमरी(); लंबे फ्रीमेमरी = रनटाइम .getRuntime()। फ्रीमेमरी(); वापसी (कुल स्मृति - मुक्त स्मृति); – Hurda

उत्तर

1

वर्चुअल मेमोरी 64-बिट वातावरण में कोई कीमत नहीं है, इसलिए मुझे यकीन नहीं है कि चिंता क्या है। निवासी स्मृति 650 एमबी या एमईएम का केवल 1.3% है। यह स्पष्ट नहीं है कि यह बहुत मेमोरी का उपयोग कर रहा है।

डिफ़ॉल्ट अधिकतम ढेर आकार 64-बिट JVMs के लिए मुख्य स्मृति का 1/4 है। यदि आपके पास 48 जीबी मेमोरी है तो आपको डिफ़ॉल्ट ढेर आकार 12 जीबी मिल सकता है और कुछ साझा पुस्तकालयों, धागे आदि के साथ इसका परिणाम वर्चुअल मेमोरी आकार 12.5 जीबी हो सकता है। इसका मतलब यह नहीं है कि आपके पास मेमोरी रिसाव है, या आपको कोई समस्या भी है, लेकिन यदि आप चाहें तो आप अधिकतम ढेर आकार को कम कर सकते हैं।

बीटीडब्ल्यू: आप $ 200 से कम के लिए 32 जीबी खरीद सकते हैं। यदि आप स्मृति पर कम चल रहे हैं, तो मैं कुछ और खरीदूंगा।

+2

अच्छा, यह अधिक मेमोरी खरीदने के बारे में नहीं है, यह क्लाइंट मशीनों पर बहुत अधिक स्मृति का उपभोग करने वाला है। क्या जेटी के लिए 12 जीबी मेमोरी का उपभोग करने के लिए बहुत कुछ नहीं है जब मेरा ऐप किसी की मशीन पर स्थापित होता है? :) – user220755

+1

स्पष्ट होने के लिए यह _jetty_ इस स्मृति को नहीं ले रहा है लेकिन जो भी जेटी में तैनात किया जाता है, जेटी के पास एक छोटा पदचिह्न –

+0

है, आप बताते हैं कि निवासी स्मृति 650 एमबी है। यह साझा स्मृति और धागे सहित वास्तविक स्मृति की वास्तविक मात्रा है।12 जीबी अधिकतम ढेर मेमोरी है जिसका उपयोग कर सकते हैं। –

4

कृपया स्टार्टअप पर उपयोग किए गए JVM विकल्प पेस्ट करें। आप पहले से उल्लिखित एक्सएमएक्स विकल्प के साथ जेवीएम द्वारा उपयोग की गई अधिकतम मेमोरी को समायोजित कर सकते हैं।

आपका एप्लिकेशन केवल 603 एमबी आरक्षित मेमोरी का उपयोग कर रहा है। ऐसा नहीं लगता है कि यह आपको चिंता करनी चाहिए। आप या तो "jmap" का उपयोग कर मेमोरी उपयोग के बारे में कुछ विस्तृत जानकारी प्राप्त कर सकते हैं, jmx सक्षम कर सकते हैं और jconsole के माध्यम से कनेक्ट कर सकते हैं या प्रोफाइलर का उपयोग कर सकते हैं। यदि आप * निक्स भूमि में रहना चाहते हैं तो आप अपने ओएस का समर्थन करते हुए भी "मुक्त" आज़मा सकते हैं।

आपके मामले में जेटी 12,5 गीगा स्मृति पर कब्जा नहीं कर रहा है। यह 603 एमबी पर कब्जा कर रहा है। उदाहरण के लिए Google "वर्चुअल मेमोरी लिनक्स" के लिए और आपको वर्चुअल और आरक्षित मेमोरी के बीच के अंतर के बारे में बहुत सारी जानकारी मिलनी चाहिए।

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