2012-04-10 12 views
9

हाय दोस्तों: मेरे पास कुछ कोड है जो एसडब्ल्यू को एक एडब्लूएस मशीन पर अग्रेषित किए गए कनेक्शन पर कई बाकी प्रश्न पूछता है (fyi: ये प्रश्न इस पर चल रहे एक सौर सर्वर को मार रहे हैं मशीन), और प्रश्न मेरे लोकहोस्ट के खिलाफ चलते हैं (जिसे एडब्ल्यूएस उदाहरण के लिए भेजा जाता है)।ओएस एक्स टर्मिनल, एसएसएच, और बहुत सी खुली फाइलें

कोड शुरू में आवश्यक डेटा प्राप्त करने में बहुत अच्छा चलता है, लेकिन थोड़ी देर के लिए चलने के बाद, कोड स्टाल (ग्रहण में)।

इस सटीक पल में, टर्मिनल (यानी, जहां मैं अपने ssh सुरंग शुरू कर दिया है) पूरी तरह से स्थिर हो जाता है, स्ट्रिंग के साथ भरने:

"स्वीकार करते हैं: बहुत अधिक फ़ाइलें खुली"

क्योंकि यह अनंत प्रिंट एक बैश टर्मिनल से जुड़ा नहीं है (यानी मैं गीला नहीं कह सकता कि एसएसएच कनेक्शन अभी भी जिंदा है या नहीं, और कोई पाठ नहीं है जो दर्शाता है कि कौन सा खोल आईएम ... बस बेबुनियाद, निरंतर प्रिंट स्टेटमेंट्स) मैं नहीं बता सकता गीला यह अमेज़ॅन, या मेरे ग्राहक टर्मिनल से आ रहा है।

मैं इस व्यवहार के कारण खोजने के लिए और मशीन जो मेरे टर्मिनल विस्फोट

जो दो मशीनों की त्रुटि के अनंत प्रिंट आउट पैदा कर रहा था परीक्षण करने के लिए खड़ी कर रहा है स्थिर करना चाहते हैं, मैं भाग गया सर्वर पर ulimit कमांड ... और पाया गया है कि खुले फ़ाइलों की अधिकतम संख्या (aws सर्वर पर) खुली फ़ाइलों की मात्रा से अधिक थी (किसी भी समय उल्लिखित का उपयोग करके निर्धारित) क्लाइंट प्रोग्राम (से चल रहा है) मेरा विचार) निष्पादित कर रहा है।

मैंने अपने क्लाइंट पर एक ही परीक्षण किया, और खुली फ़ाइलों की संख्या में कोई महत्वपूर्ण वृद्धि नहीं मिली।

कुछ पक्ष विवरण: मैं एक एसओएलआर सर्वर में कई सैकड़ों प्रश्न चला रहा हूं जिसमें कम समय में 100GB से अधिक डेटा है।

कोई संकेत यह निर्धारित करने के लिए कि मेरा एसएसडीडी मैक ओएस एक्स टर्मिनल क्यों मर रहा है और असीमित रूप से इस संदेश को प्रिंट कर रहा है मेरे लिए संभावित रूप से बहुत उपयोगी होगा। बेशक, गीले या नहीं वे solr के लिए विशिष्ट थे। उस ने कहा, किसी भी अंतर्दृष्टि में यह क्यों होगा कि एक समाधान सेवा का उपयोग करते समय ऐसा क्यों होगा, इस समस्या को हल करने के लिए भी मदद कर सकता है।

उत्तर

3

निश्चित होने के लिए यहां पर्याप्त जानकारी नहीं है, लेकिन ऐसा लगता है कि ssh अग्रेषित सॉकेट से स्थानीय रूप से कनेक्शन स्वीकार करने की कोशिश करते समय अपनी प्रति-प्रक्रिया फ़ाइल डिस्क्रिप्टर सीमा को मार रहा है, जो बदले में सुझाव देता है कि पहले से ही खुले कनेक्शन नहीं हैं एक समय पर फैशन में बंद किया जा रहा है। कनेक्शन और डिस्कनेक्शन के विवरण देखने के लिए आप ssh-d के साथ चला सकते हैं; आप अपने stderr पर कब्जा करना चाहते हैं और सॉकेट ऑपरेशंस को ट्रैक करने के लिए एक स्क्रिप्ट का उपयोग करना चाहते हैं क्योंकि उन्हें कई अन्य डीबग जानकारी में दफनाया जाएगा।

ध्यान दें कि ssh अपने अग्रेषित बंदरगाह पर सेवा हमलों से इनकार करने से बचने के लिए डिफ़ॉल्ट रूप से अपने खुले फ़ाइल डिस्क्रिप्टर को सीमित कर सकता है; मुझे दस्तावेज़ीकरण में इसका कोई संकेत नहीं दिख रहा है, लेकिन यह मेरी तरह की चीज है।

12

आप (टर्मिनल प्रकार के माध्यम से) ulimit में देखने का प्रयास कर सकते हैं:

ulimit -a 

विशेष रूप से, open files के लिए मूल्य की जाँच करें। मेरी मशीन (ओएस एक्स) पर यह 256 की रिपोर्ट करता है।आप 512 के लिए इसे बढ़ाने की कोशिश करना चाहते हो सकता है:

ulimit -n 512 
+1

आपको उस उपयोगकर्ता के लिए ऐसा करने की आवश्यकता हो सकती है जो एसओएलआर चल रहा है, उदाहरण के लिए टोमकैट के रूप में। – nickdos

+0

यह मेरे लिए काम नहीं किया। – ethicalhack3r

+0

मुझे बैश के प्रत्येक उदाहरण के लिए ऐसा करना था जो प्रोग्राम चला रहा था जिसके लिए अधिक फ़ाइलों की आवश्यकता थी। – Chris

6

यह मेरे लिए काम किया है लगता है:

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf 
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf 
echo 'ulimit -n 4096' | sudo tee -a /etc/profile 

फिर ओएस एक्स पुनः आरंभ

https://superuser.com/questions/302754/increase-the-maximum-number-of-open-file-descriptors-in-snow-leopard

0
sudo launchctl limit maxfiles 1000000 unlimited 

या

sudo sysctl -w kern.maxfilesperproc=1000000 
sudo sysctl -w kern.maxfilesperproc=18000 

इस तरह, /etc/sysctl.conf में अपनी सेटिंग्स डाल करने के लिए (आप बनाने के लिए हो सकता है) परिवर्तन स्थाई बनाने के लिए, sudo का उपयोग करें:

kern.maxfiles=20480 
kern.maxfilesperproc=18000 

नोट - पर संख्या का चयन अपने अपने जोखिम

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