2010-01-24 19 views
9

क्या एरलांग टीसीपी/आईपी लाइब्रेरी में कुछ सीमाएं हैं? मैंने कुछ खोज की है लेकिन मुझे कोई निश्चित उत्तर नहीं मिल रहा है।एरलांग की एक साथ खुली बंदरगाहों की अधिकतम संख्या?

मैंने ERL_MAX_PORTS पर्यावरण चर को 12000 पर सेट किया है और असीमित कनेक्शन का उपयोग करने के लिए कॉन्फ़िगर किया गया है।

मैंने एक साधारण क्लाइंट एप्लिकेशन लिखा है जो मैंने यॉ के लिए लिखे गए एपमोड से कनेक्ट किया है और एक ही समय में सभी क्लाइंट एक्स लॉन्च करके एक साथ कनेक्शन की संख्या का परीक्षण कर रहा हूं।

मुझे लगता है जब मैं लगभग 100 ग्राहकों को मिलता है, याज सर्वर अधिक TCP कनेक्शन और ग्राहक त्रुटियों

 
Error in process with exit value: {{badmatch,{error,socket_closed_remotely}} 

के साथ बाहर को स्वीकार मैं जानता हूँ कि खुला निरंतर कनेक्शन की संख्या की कोई सीमा होनी चाहिए बंद हो जाता है कि , लेकिन 100 वास्तव में कम लगता है। मैंने सभी yaws दस्तावेज देखा है और कनेक्शन पर किसी भी सीमा को हटा दिया है।

यह 2.16 गीगा इंटेल कोर 2 डुओ आईमैक चल रहा है हिम तेंदुए।

विस्टा मशीन पर एक त्वरित परीक्षण से पता चलता है कि मुझे लगभग 300 कनेक्शनों में एक ही समस्या है।

क्या मेरा परीक्षण अनुचित है? अर्थात। क्या Yaws की सहमति का परीक्षण करने के लिए एक साथ 100+ कनेक्शन खोलने के लिए मूर्खतापूर्ण है?

धन्यवाद।

+0

क्या 'socket_closed_remotely' सुझाव नहीं देता है कि समस्या ग्राहक में है? – Zed

+0

आपके संपादन के बाद मेरा उत्तर अपडेट किया गया, शायद ऐसा इसलिए है क्योंकि आप उन्हें एक ही समय में खोलते हैं। – stacker

+0

जेड: त्रुटि संदेश क्लाइंट पक्ष से है, इसलिए Yaws सॉकेट बंद कर रहा है। मैं Yaws में लॉग इन कुछ भी नहीं देख रहा हूँ। – ckovacs

उत्तर

0

हर किसी के सुझाव की कोशिश करने और एरलांग दस्तावेज़ों को खराब करने के बाद, मैं इस निष्कर्ष पर आया हूं कि मेरी समस्या लोड के साथ बनाए रखने में सक्षम नहीं है।

उसी मशीन पर, अपाचे एचटीपी घटक वेब सर्वर (गैर-अवरुद्ध I/O) में समान थ्रेसहोल्ड पर कनेक्शन को संभालने में समान समस्याएं नहीं होती हैं।

आपकी सभी मदद के लिए धन्यवाद। मैं Mochiweb जैसे अन्य erlang आधारित वेब सर्वर पर जाने जा रहा हूँ।

+0

ठीक है, बेशक आप सही जवाब के रूप में जांचने के लिए सही नहीं हैं। – Farsheed

6

ऐसा लगता है कि आप एक प्रणाली सीमा मारा, का उपयोग कर

$ ulimit -n 500 

Python on Snow Leopard, how to open >255 sockets?

Erlang ही 1024 के एक सीमा होती है खुली फ़ाइलों की अधिकतम संख्या को बढ़ाने के लिए प्रयास करें:

http://www.erlang.org/doc/man/erlang.html

से

एक ही समय में खुले बंदरगाहों की अधिकतम संख्या डिफ़ॉल्ट रूप से 1024 है, लेकिन पर्यावरण va द्वारा कॉन्फ़िगर किया जा सकता है व्यवहार्य ERL_MAX_PORTS।

संपादित करें:

सिस्टम कॉल listen() एक पैरामीटर बैकलॉग जो निर्धारित करता है कि कितने अनुरोध पंक्तिबद्ध किया जा सकता है, कृपया जाँच करें कि क्या कनेक्शन स्थापित करने के लिए अनुरोध के बीच भी विलंब मदद करता है। यह आपकी समस्या हो सकती है।

+1

यदि अधिकतम बंदरगाह कम हो गए थे, तो त्रुटि 'enfile' होगी और 'socket_closed_remotely' नहीं होगी। – Zed

+0

क्षमा करें, मैं यह उल्लेख करना भूल गया था कि मैंने ओएस एक्स और विस्टा सेटअप दोनों पर ERL_MAX_PORTS को 12000 पर सेट किया है – ckovacs

+0

उसी परिणाम के साथ अल्मिमिट को भी सेट करने का प्रयास किया – ckovacs

3

सभी Erlang सिस्टम सीमाओं Erlang क्षमता गाइड में रिपोर्ट कर रहे हैं:

http://erlang.org/doc/efficiency_guide/advanced.html#id2265856

खुला बंदरगाहों से पढ़ना अनुभाग:

एक साथ खुला Erlang बंदरगाहों की अधिकतम संख्या है डिफ़ॉल्ट रूप से 1024। यह सीमा पर सबसे 268,435,456 स्टार्टअप पर अप करने के लिए उठाया जा सकता है (erlang में पर्यावरण चर ERL_MAX_PORTS देखना (3)) 268,435,456 खुला बंदरगाहों की अधिकतम सीमा को कम से कम एक 32-बिट वास्तुकला पर असंभव तक पहुँचने के लिए किया जाएगा स्मृति की कमी के कारण।

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