फ़ाइल डिस्क्रिप्टर की संख्या पर सीमा


34

मैं स्थापित करने की कोशिश कर रहा हूँ 389-ds, और यह मुझे यह चेतावनी देता है:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

मैं फाइल डिस्क्रिप्टर के बारे में समझता हूं, लेकिन मैं सॉफ्ट और हार्ड लिमिट के बारे में नहीं समझता।

जब मैं दौड़ता हूं cat /proc/sys/fs/file-max, तो मैं पीछे हट जाता हूं 590432। इसका मतलब यह होना चाहिए कि मैं 590432 फाइल तक खोल सकता हूं (यानी 590432 फाइल डिस्क्रिप्टर तक हो सकता है।

लेकिन जब मैं दौड़ता हूं ulimit, तो यह मुझे अलग परिणाम देता है:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

लेकिन इसमें से हार्ड / सॉफ्ट लिमिट क्या हैं ulimit, और वे स्टोर किए गए नंबर से कैसे संबंधित हैं /proc/sys/fs/file-max?

जवाबों:


39

के अनुसार गिरी प्रलेखन , /proc/sys/file-maxअधिकतम, कुल वैश्विक फ़ाइल वर्णनकर्ता गिरी घुट से पहले आवंटित करेगा की संख्या है। यह कर्नेल की सीमा है, आपके वर्तमान उपयोगकर्ता की नहीं। तो आप 590432 खोल सकते हैं, बशर्ते आप एक निष्क्रिय प्रणाली (एकल-उपयोगकर्ता मोड, कोई डेमॉन नहीं चल रहे) पर अकेले हों।

ध्यान दें कि दस्तावेज़ पुराना है: फ़ाइल proc/sys/fs/file-maxलंबे समय से है। इसे इंगित करने के लिए मार्टिन जाम्बोन का धन्यवाद।

एसई पर, नरम और कठोर सीमाओं के बीच अंतर का जवाब यहां दिया गया है । आप एक साधारण उपयोगकर्ता के रूप में एक नरम सीमा बढ़ा सकते हैं या कम कर सकते हैं, बशर्ते आप कठिन सीमा को पार न करें। आप एक कठिन सीमा भी कम कर सकते हैं (लेकिन आप इसे उस प्रक्रिया के लिए फिर से नहीं बढ़ा सकते हैं)। सुपरसुसर के रूप में, आप कठिन और नरम दोनों सीमाओं को बढ़ा सकते हैं और कम कर सकते हैं। दोहरी सीमा योजना का उपयोग सिस्टम नीतियों को लागू करने के लिए किया जाता है, लेकिन यह भी सामान्य उपयोगकर्ताओं को अपने लिए अस्थायी सीमा निर्धारित करने और बाद में उन्हें बदलने की अनुमति देता है।

ध्यान दें कि यदि आप नरम सीमा से नीचे एक कठिन सीमा को कम करने की कोशिश करते हैं (और आप सुपरसुसर नहीं हैं), तो आपको EINVALवापस मिल जाएगा (अमान्य तर्क)।

तो, आपके विशेष मामले में, ulimit(जो कि जैसा है ulimit -Sf) कहता है कि आपके पास शेल और इसके उपप्रकारों द्वारा लिखी गई फ़ाइलों के आकार पर एक नरम सीमा नहीं है । (यह ज्यादातर मामलों में एक अच्छा विचार है)

आपका अन्य मंगलाचरण, ulimit -Hnपर रिपोर्ट -nसीमा (फ़ाइल खोलने वर्णनकर्ता की अधिकतम संख्या), नहीं-f सीमा, जिसके कारण नरम सीमा कठिन सीमा से अधिक लगता है। यदि आप दर्ज करते हैं ulimit -Hfतो आपको 'असीमित' भी मिलेगा।


14
लिनक्स 4.4.0 पर, फ़ाइल-अधिकतम पथ है /proc/sys/fs/file-max
मार्टिन जाम्बोन

ulimit -Hn फ़ाइल डिस्क्रिप्टर क्षमताओं को आवंटित करने के लिए हार्ड लिमिट सिस्टम की बहुत सीमा को लक्षित करता है?
वेबवुमन

2
@Webman: नहीं, यह नहीं है। ulimitकेवल वर्तमान प्रक्रिया के लिए सीमा को प्रभावित करता है । वर्तमान प्रक्रिया की सीमाएँ बच्चों की प्रक्रियाओं के लिए भी सीमित हैं, लेकिन प्रत्येक प्रक्रिया की एक अलग गिनती है। जैसे ulimit -Hn 10, आप किसी भी एक समय में केवल 10 फ़ाइल विवरणक खोल सकते हैं। आपके द्वारा बनाई गई प्रत्येक बाल प्रक्रिया में केवल 10 फ़ाइल डिस्क्रिप्टर तक हो सकते हैं। एक बार सेट करने पर केवल सुपरयुसर एक सीमा बढ़ा सकता है। यदि आप एक बहुत कम सेट करते हैं, तो आपका एकमात्र विकल्प आपकी शेल प्रक्रिया को मारना और एक नई शुरुआत करना हो सकता है।
एलेक्सिस

0

"सिलेक्ट" सिस्टम कॉल यूनिक्स के कई भयानक मस्तिष्क मृत डिजाइन निर्णयों में से एक है जो विंडोज़ 95 को अभी भी तुलना में बहुत अच्छा दिखता है।

इसे 20 साल पहले प्रतिबंधित कर दिया जाना चाहिए था और तब हमारे पास अब तक बिना समस्या के असीमित फ़ाइल संचालकों की क्षमता हो सकती है।

आप कर्नेल कॉन्फ़िगरेशन और ulimit BUT के साथ आसानी से फ़ाइल डिस्क्रिप्टर की संख्या बढ़ा सकते हैं, लेकिन याद रखें कि यदि कोई लाइब्रेरी "सिलेक्ट" सिस्टम कॉल का उपयोग करता है तो आपका प्रोग्राम अस्थिर (मेमोरी भ्रष्टाचार) हो जाएगा और विफल हो जाएगा।

चयन 0 से 1023 तक केवल फ़ाइल डिस्क्रिप्टर को संभाल सकता है और यदि आप किसी को उच्च मूल्य के साथ खिलाते हैं तो यह आपकी मेमोरी में बेतरतीब ढंग से प्रहार करेगा और चयन डिस्क्रिप्टर को काम करते हुए कभी नहीं दोहराएगा। दुर्भाग्य से कई पुस्तकालय चयन का उपयोग करते हैं।


आपकी टिप्पणी एक उपयोगी चेतावनी है, लेकिन रंटिंग टोन लेने के बजाय, fd_set(3)मैन पेज को उद्धृत करने के लिए यह कहीं अधिक उपयोगी होता और यह सीमा होती है FD_SETSIZE। और सबसे अच्छा एक प्रतिस्थापन कॉल का सुझाव होगा poll(3), जैसा कि इस उत्तर में है
डायवर क्यूब्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.