2012-04-18 12 views
6

में अधिकतम सुरक्षित JVM ढेर आकार का आकलन करने के लिए 64-बिट जावा ऐप को प्रोफाइल करने के दौरान कुछ समस्याएं हैं, मुझे पता है कि प्रोफाइलर स्वयं (YourKit) वास्तव में स्मृति की विशाल मात्रा का उपयोग कर रहा है। क्या मैं YourKit लांच लिपि में मिल गया है है:64-बिट जावा

JAVA_HEAP_LIMIT="-Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m" 

भोलेपन से, कुछ भूमि के ऊपर यह सोचते हैं, यह मेरे नेतृत्व का अनुमान लगाना कि YourKit शायद चार जीबी से अधिक एक सा कुछ की एक अधिकतम उपयोग करने के लिए जा रहा है होगा। हालांकि, क्या मैं वास्तव में पी एस में देखते हैं:

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
dmoles 31379 4.4 68.2 14440032 8321396 ? Sl 11:47 10:42 java -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dyjp.probe.table.length.limit=20000 -Xbootclasspath/a:/home/dmoles/Applications/yjp-9.5.6/bin/../lib/tools.jar -jar /home/dmoles/Applications/yjp-9.5.6/bin/../lib/yjp.jar 

लगभग 14 जीबी की एक आभासी आकार और लगभग 8 जीबी का निवासी आकार है कि - लगभग जावा ढेर 3 गुना।

अब, मुझे यह चलाने के लिए मेरे देव बॉक्स पर पर्याप्त स्मृति मिल गई है, लेकिन मूल स्मृति समस्या पर वापस जा रहा हूं, मैं निदान करने की कोशिश कर रहा हूं: मुझे कैसे पता चलेगा कि जावा ढेर के साथ मुझे कितना खेलना है?

स्पष्ट रूप से, यदि ग्राहक कहता है, 16 जीबी भौतिक रैम, तो मुझे -Xmx से 16 जीबी सेट करने के लिए कहने का एक अच्छा विचार नहीं है।

तो एक उचित संख्या है? 12 जीबी? 8 जीबी?

और मैं इसका अनुमान कैसे लगा सकता हूं?

उत्तर

9

स्पष्ट रूप से, यदि ग्राहक कहता है, 16 जीबी भौतिक रैम, तो मुझे यह कहना अच्छा नहीं है कि एक्सएमएक्स को 16 जीबी तक सेट करना है।

ग्राहक कुछ भी नहीं चल रहा था, तो किसी और उसकी/उसके मशीन पर महत्वपूर्ण है, तो 16 जी के ढेर आकार की स्थापना जरूरी एक बुरा विचार नहीं है। यह इस बात पर निर्भर करता है कि एप्लिकेशन क्या कर रहा है।

तो उचित संख्या क्या है? 12 जीबी? 8 जीबी?

आदर्श संख्या "JVM अधिकतम ढेर + JVM गैर ढेर ओवरहेड्स + ओएस + अन्य सक्रिय अनुप्रयोगों 'वर्किंग सेट + बफर सेट काम कर कैश" के लिए होगा भौतिक स्मृति की मात्रा को जोड़ने। लेकिन समस्या यह है कि उन घटकों में से कोई भी (अधिकतम ढेर आकार के अलावा) को ग्राहक की मशीन पर विस्तृत माप के बिना पिन किया जा सकता है ... जबकि एप्लिकेशन वास्तविक समस्या पर चल रहा है।

और मैं इसका अनुमान कैसे लगा सकता हूं?

नीचे की रेखा यह है कि आप नहीं कर सकते हैं। सबसे अच्छा आप अनुमान लगा सकते हैं ... और रूढ़िवादी हो।

एक वैकल्पिक दृष्टिकोण आवेदन वास्तव में समस्या इसे हल करने की कोशिश कर रहा है के लिए की जरूरत है कितना ढेर अनुमान लगाने के लिए है। फिर जीसी रूम को कुशलता से काम करने के लिए अतिरिक्त 50 या 100 प्रतिशत जोड़ें। (और फिर धुन ...)

+0

+1 कह रही है कि यह एक अच्छा विचार अनुमान लगाने के लिए कितना ढेर आवेदन की जरूरत है और वहाँ से जाना है के लिए। "मैं इसका अनुमान कैसे लगा सकता हूं" प्रश्न मुझे एरिक लिपर्ट की पोस्ट [थ्रेड खुशी की त्रासदी] के बारे में याद दिलाता है (http://blogs.msdn.com/b/ericlippert/archive/2004/02/15/the-tragedy- की-धागे की खुशी-disease.aspx)। –

+0

@AdamMihalcin Ouch। :) –

+0

@AdamMihalcin यह अच्छी सलाह है, लेकिन सिक्का के दो पक्ष हैं।प्रमुख (अनुमान लगाते हुए कि एप्लिकेशन की कितनी जरूरत है), "यहां हम कितने उपयोगकर्ता उम्मीद करते हैं; हमें कितना सर्वर खरीदना चाहिए?" पूंछ है, "यहां हमारे पास कितना सर्वर है; स्मृति से बाहर होने से पहले हमें कितने उपयोगकर्ताओं को संभालने में सक्षम होने की उम्मीद करनी चाहिए?" –