2012-04-13 11 views
5

मैंने जावा में एक कस्टम संदेश सर्वर बनाया है जो संदेशों की एक स्ट्रीम लेता है और प्रत्येक संदेश को अपने क्लाइंट को भेजता है (1: 1, ड्रॉप संदेश अगर कनेक्ट नहीं होता है - बहुत सरल)। मैं Win7x64 & जावा 7 पर टॉमकैट 7 चला रहा हूं और एनआईओ कनेक्टर (एक धूमकेतु सर्वलेट लागू) का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है लेकिन अब मैं उस जानवर को स्केल करने की तलाश में हूं और वर्तमान में प्रत्येक कनेक्टेड क्लाइंट के लिए आवंटित 85 केबी रैम देख रहा हूं। 900 एमबी के तहत 10.000 ग्राहक @ रैखिक रूप से स्केलिंग। (मैं अभी कुछ भी नहीं कर रहा हूं लेकिन कनेक्शन को पकड़ रहा हूं) यह मेरी राय के लिए काफी कुछ है, इसलिए मैं सोच रहा हूं कि टॉमकैट या जावा को अपने एनआईओ इम्प्ल के साथ अधिक मेमोरी बचाने के लिए कुछ बदलाव हैं या नहीं। मैंने अभी तक की सभी टॉमकैट सेटिंग्स को प्रभावित नहीं किया है।टॉमकैट "प्रति कनेक्शन" मेमोरी पदचिह्न को कम करें

क्या किसी को अनुभव है कि जावा या टॉमकैट को सॉकेट कनेक्शन के बारे में स्मृति आहार पर कैसे रखा जाए?

अद्यतन: अब मैं सॉकेट बफर और कुछ अन्य टोमकैट आंतरिक को ट्रिम करके 70 किलो/कनेक्शन के नीचे नीचे आ गया हूं। सुनिश्चित नहीं है कि यह अब थ्रूपुट को कैसे प्रभावित करता है। मैंने उसी परिणाम के साथ 32 बिट/64 बिट लिनक्स पर भी कोशिश की है।

+0

आपने प्रति ग्राहक 85kb कैसे मापा? – dash1e

+0

मैंने एक छोटा भार परीक्षण किया और 10.000 क्लाइंट जुड़े। सर्वर कोड में मैंने प्रत्येक 100 क्लाइंट के बाद System.gc() किया और फिर कंसोल पर Runtime.totalMemory() - Runtime.freeMemory() मुद्रित किया। – Daniel

+0

हाय। क्या आप अपनी सर्वश्रेष्ठ टोमकैट/जेवीएम सेटिंग्स साझा कर सकते हैं? इसके अलावा, क्या आपने एनआईओ कनेक्टर का उपयोग किया था? 10x – JRun

उत्तर

1

काफी कुछ शोध और आसपास खेलने के बाद मुझे निष्कर्ष निकाला गया कि टॉमकैट के साथ उचित मात्रा में स्मृति के साथ समवर्ती कनेक्शन को संभालने के लिए यह संभव नहीं है। (मैं अभी भी खुशी होगी यहाँ btw गलत साबित करने के लिए)

हालांकि, वहाँ एक रक्षक है:

Netty: http://www.jboss.org/netty/downloads

यह एक जावा आईओ ढांचे जावा के नए NIO वास्तुकला पर बनाता है और लगता है कि है बहुत अच्छी तरह से डिजाइन और लिखित। आप एक हल्के मॉड्यूल को एक साथ ढेर कर सकते हैं और एक मिनी वेबसर्वर बना सकते हैं या बस एसिंक्रोनस तरीके से टीसीपी कनेक्शन को संभाल सकते हैं।

मैं ईसी 2 पर एक लोडटेस्ट चला गया और इसे केवल 1.5 जीबी रैम @ 7 मिलियन कनेक्शन दिमाग में डाल दिया! (टॉमकैट टेस्ट के साथ मैंने कनेक्शन को स्टोर करने के अलावा कुछ भी नहीं किया, इसलिए एक वास्तविक ऐप निश्चित रूप से थोड़ा और याद रखेगा, लेकिन 200 बाइट्स/कनेक्शन "ओवरहेड" कुछ भी नहीं है!) और यह केवल वहां रुक गया क्योंकि मैंने जावा वीएम सीमित किया 1.5 जीबी तक, मुझे यकीन है कि एक सी 10 एम परीक्षण आसानी से करने योग्य होगा।

नेटटी और जावा वीएम लोगों के लिए बड़े कुडोस! मैं प्रसन्न हूँ।

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