2012-06-13 29 views
8

मेरा आवेदन 950-970 एसएसएल कनेक्शन के बीच SSL_read के अंदर segfaults से पहले रखता है। क्या ओपनएसएसएल को इससे अधिक कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर करना संभव है?ओपनएसएसएल कनेक्शन की अधिकतम संख्या

मैंने इसे प्राप्त करने के बाद कनेक्शन पर कुछ भी करने के लिए प्रोग्राम नहीं किया है, इसलिए मुझे पता है कि यह # खुले कनेक्शन का एक कार्य है, वर्तमान में पढ़ने/लिखने या समय के कनेक्शन के # नहीं।

अपडेट:

  • एक ही स्थान पर ubuntu पर एक ही त्रुटि। मैं आगे बढ़ने पर उबंटू पर काम कर रहा हूं।
  • वही त्रुटि अगर मैं अपने मशीन आकार (रैम, स्वैप, सीपीयू) को कनेक्शन की एक ही संख्या में दोगुना करता हूं।
  • संदर्भ शून्य नहीं है।
  • ulimit -n 4096 पर सेट है। मैंने इसे ulimit -100 पर सेट करके सत्यापित किया है, उस मामले में एक अलग त्रुटि देखी गई है।
  • समस्या तब होती है जब धागे को पूल किया जाता है। समस्या कनेक्शन की एक ही संख्या में होती है, भले ही 1 थ्रेड/कनेक्शन या 1 थ्रेड/10 कनेक्शन हों।

मैं डीबगिंग विकल्प सक्षम के साथ स्रोत से ओपनएसएसएल बनाने की कोशिश कर रहा हूं। मुझे आश्चर्य हो रहा है कि इसमें घंटों लगेंगे या मुझे कुछ उपयोगी बताएंगे। मुझे लगता है मैं निर्धारित किया है segfault openssl वी 1.0.1.c में इस लाइन पर हो रहा है कि here.

पर एक सवाल है:

ssl_lib.c:968 

968  return(s->method->ssl_read(s,buf,num)); 

इसके अलावा, मैं निर्धारित किया है कि इस अंदर segfaulting नहीं है ssl_read फ़ंक्शन (जिसे ssl3_read पर इंगित करना चाहिए)। सदस्य method की ssl_read वास्तव में खुद को अमान्य है और ऐसा लगता है method खुद भी अवैध है (मैं के आधार पर इस निष्कर्ष निकालते कर रहा हूँ "अजीब लग रही पता।")

+0

क्या आप यह पता लगा सकते हैं कि यह कहां सेगफॉल्टिंग है? –

+0

कहीं SSL_read 3/4 बार में और एक बार SSL_get_error में। मुझे नहीं पता कि जीडीबी के साथ इसके अंदर के अंदर कैसे दिखना है, हालांकि मुझे लगता है कि इसमें स्रोत से संकलन, ऑप्टिमाइज़ेशन को डमी करना आदि शामिल हैं। – djechlin

+0

क्या आपका सिस्टम किसी भी मौके से स्मृति, या कुछ अन्य संसाधन से बाहर चल रहा है? –

उत्तर

4

IMHO, ऐसा लगता है जैसे आप कुछ सीमा तक पहुँच गया। जैसा कि आपने कहा था, संख्या फ़ाइल वर्णनकर्ता ठीक है। तो, आप ulimit के साथ स्टैक आकार बढ़ाने का प्रयास कर सकते हैं। उदाहरण के लिए:

ulimit -s 32768 

इसके अलावा, आप एक उपकरण valgrind की तरह आप पता लगाना क्या वास्तव में अपने अनुप्रयोग segfaults बिंदु पर चल रहा है मदद करने के लिए इस्तेमाल कर सकते हैं,।

उम्मीद है कि यह मदद करता है।

+0

+1, जिसका उपयोग निश्चित रूप से यहां सहायता करेगा। – alk

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