2011-12-19 21 views
5

पर टोमकैट के लिए जावा ढेर आवंटित करना मैं जावा सर्वलेट लिख रहा हूं जिसे मैं अमेज़ॅन एडब्ल्यूएस पर लोचदार बीनस्टॉक का उपयोग करके तैनात करने की योजना बना रहा हूं। मेरे परीक्षणों से पता चलता है कि चीजें अपने स्टॉक टोमकैट एएमआई का उपयोग करके छोटे ईसी 2 इंस्टेंस का उपयोग करके अच्छी तरह से चलती हैं जो बीनस्टॉक का उपयोग करती है।एक ईसी 2 उदाहरण

मैं इस कॉन्फ़िगरेशन के लिए जावा हीप स्पेस को सही तरीके से आवंटित करने का तरीका समझने की कोशिश कर रहा हूं। एक छोटे से उदाहरण में 1.7 जीबी की स्मृति है, इसलिए मैं सोच रहा हूं कि एक 1024 एमबी ढेर अच्छी तरह से काम करेगा। मुझे एहसास है कि अन्य चीजों के लिए स्मृति की आवश्यकता होगी, भले ही इस उदाहरण का एकमात्र "असली" उद्देश्य टोमकैट चलाने के लिए है। और मुझे यह भी पता है कि बड़े ढेर के साथ कुछ बिंदु है जहां मानक सूर्य/ओरेकल जेवीएम वास्तव में काम नहीं करता है।

क्या यह स्मृति आवंटित करने का एक उचित तरीका है? क्या मुझे कम या ज्यादा उपयोग करना चाहिए? इष्टतम विन्यास निर्धारित करने में मदद के लिए मैं किस उपकरण का उपयोग कर सकता हूं?

उत्तर

2

1024 ठीक लगता है, शायद थोड़ा सा।

मुझे बिल्कुल यकीन नहीं है कि आपका सर्वलेट क्या कर रहा है, लेकिन आपको एक विचार देने के लिए, मेरे पास एक ईकॉमर्स एप्लिकेशन है जिसमें लगभग 1000 दैनिक उपयोगकर्ता 2 छोटे ec2 उदाहरणों पर चल रहे हैं। टोमकैट लोड mod_jk के माध्यम से वितरित किया जाता है।

मैंने जेवीएम को बिल्कुल ट्यून नहीं किया और डिफ़ॉल्ट सेटिंग्स को रखा। मैं टेराकोटा वितरित ऑब्जेक्ट कैशिंग का भी उपयोग कर रहा हूं, और यह प्रक्रिया अधिकांश स्मृति का उपभोग कर रही है।

क्या आप लिनक्स आधारित ओएस या विंडोज़ पर तैनात हैं? आईएमओ, लिनक्स उपलब्ध स्मृति के प्रबंधन में एक बेहतर काम करता है।

टूल्स के रूप में, मैं आपके आवेदन को एक छोटे से ec2 उदाहरण के रूप में तैनात करने और एप्लिकेशन का परीक्षण करने के लिए जेएमटर जैसे टूल का उपयोग करने का सुझाव दूंगा। तनाव परीक्षण के दौरान, आप शीर्ष उपयोगिता खोल सकते हैं (माना जाता है कि आपका ऐप लिनक्स पर है और शीर्ष स्थापित है)।

यह देख कर अपने आवेदन को तोड़ने का प्रयास करें कि यह कितना भार संभाल सकता है। यह ec2 की सुंदरता है, आप मिनटों में एक परीक्षण वातावरण स्थापित कर सकते हैं और इसके ठीक बाद इसे छोड़ सकते हैं।

+0

आपके इनपुट के लिए धन्यवाद। मैं अपने ऐप के बारे में विस्तार से नहीं जाऊंगा। यह उपयोगकर्ताओं को विभिन्न विषयों के बारे में जानकारी देखने की अनुमति देता है, और फिर संभवतः उन्हें अधिक जानकारी जोड़ता है। विषयों के बारे में कुछ जानकारी डेटाबेस से गतिशील रूप से जेनरेट की जाती है, जबकि इनमें से अधिकांश स्थिर डेटा है जिसे हम स्टार्टअप पर फ़ाइलों से पढ़ते हैं और ढेर पर हमारे स्वयं के डेटा संरचनाओं में आयोजित होते हैं। सभी एक साथ, यह लगभग 250-300 एमबी मूल्य के डेटा है। मैं अनुमान लगा रहा हूं कि जब हम वास्तव में दौड़ते हैं तो हमारे पास दिन में हजारों उपयोगकर्ता होंगे। –

+0

मेरे पिछले एडब्लूएस प्रोजेक्ट पर मैंने सबकुछ नियंत्रित करने की कोशिश की। इस परियोजना के लिए मैंने फैसला किया कि मुझे "असली" एप्लिकेशन पर और अधिक समय व्यतीत करने की आवश्यकता है और इसे कैसे बाजार में आसान नहीं किया जाना चाहिए, बल्कि मैं साधारण बीटीस्टॉक का उपयोग कर रहा हूं। इसका मतलब है कि उनके स्टॉक एएमआई का उपयोग लिनक्स है, और लोचदार लोड बैलेंसर। क्या कोई कारण है कि आप ईएलबी के बजाय लोड वितरित करने के लिए mod_jk का उपयोग क्यों कर रहे हैं? तो यह दिया गया, आपको क्यों लगता है कि 1024 थोड़ा अधिक है? यह सब कुछ के लिए 700 एमबी छोड़ देता है, जो वास्तव में मानक ऑपरेटिंग सिस्टम कार्यों के अलावा कुछ भी नहीं है। क्या मैं इसे सही तरीके से देख रहा हूं? –

+0

@ सैंडरस्मिथ मैं अभी भी ईएलबी का उपयोग कर रहा हूं लेकिन मैं इसका उपयोग 2 छोटे अपाचे वेब सर्वर उदाहरणों के बीच संतुलन के लिए कर रहा हूं। फिर मेरे apache वेब सर्वर उदाहरणों से mod_jk का उपयोग मेरे tomcat उदाहरणों में लोड वितरित करने के लिए किया जाता है। स्थिर संसाधनों की सेवा करने और एसएसएल को बेहतर तरीके से संभालने में अपाचे बेहतर है, इसलिए मैं उनका उपयोग क्यों कर रहा हूं। मुझे लगता है कि आप सबसे अच्छी चीज कर सकते हैं परीक्षण लोड है और वहां से अपने निर्णय लेते हैं। यदि आपका आवेदन दिन में 10k उपयोगकर्ताओं को प्राप्त करने की उम्मीद कर रहा है, तो मुझे नहीं लगता कि एक छोटा ec2 उदाहरण पर्याप्त होगा चाहे आप JVM को कैसे ट्यून करें –

0

जावा के लिए न्यूट्रिक की जांच करें ताकि आप ढेर उपयोग पैटर्न निर्धारित कर सकें।