लिनक्स में खुली फाइलों और रनिंग प्रक्रियाओं की संख्या को सीमित क्यों करें?


14

मुझे ऑपरेटिंग सिस्टम के आंतरिक कामकाज के बारे में अधिक जानकारी नहीं है, इसलिए हमारे पास लिनक्स में अधिकतम खुली फ़ाइलों और चलने की प्रक्रियाओं की सीमा क्यों है?

अगर कोई मुझे समझने में मदद कर सकता है तो मैं इसकी सराहना करूंगा।

जवाबों:


16

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

यह जटिल सेवाओं और डेमॉन को जांच में रखने में मदद करता है ताकि भागते हुए फोर्किंग और फ़ाइल खोलने की अनुमति न हो, कांटा बम ऐसा करने की कोशिश करता है।

यह भी ध्यान दिया जाना चाहिए कि रैम और सीपीयू की मात्रा उपलब्ध है, और यह तथ्य कि 32-बिट काउंटर केवल इतना ही संदर्भ दे सकता है (केवल 4294967296 प्रविष्टियां जिन्हें 32-बिट काउंटर द्वारा गिना जा सकता है), लेकिन ऐसी सीमाएं बहुत दूर हैं ऊपर आमतौर पर प्रोग्रामर और सिस्टम एडमिनिस्ट्रेटर द्वारा सेट किया जाता है। वैसे भी, जब तक आपके पास 4294967296 प्रक्रियाएं हैं, तब तक आपकी मशीन शायद रिबूट हो गई होगी, या तो योजनाबद्ध रूप से, या जैसा कि किसी अन्य संसाधन को भूखा होने के कारण लॉक करना शुरू हुआ।

जब तक आप अपनी 584 TiB मेमोरी के साथ टाइटन चलाते हैं (आप नहीं करेंगे, क्योंकि लिनक्स को सुपर कंप्यूटर पर एक उदाहरण के रूप में नहीं चलाया जा सकता है), आप शायद कभी भी इस प्रक्रिया की सीमा तक नहीं पहुँचेंगे। तब भी, औसत प्रक्रिया में लगभग 146KB मेमोरी ही होगी, कोई साझा मेमोरी नहीं।


2
फोर्क बम के लिए +1, पता चला कि बिना सावधानी के शेल में इन पुनरावर्ती तरीकों का इस्तेमाल कितना खतरनाक हो सकता है!
उर्फ_लर्नर

9

जीवन में और लिनक्स में, ज्यादातर सभी चीज़ों की सीमाएँ हैं। कभी-कभी सीमाएं बहुत अधिक होती हैं और चिंता के लायक नहीं होती हैं, और कभी-कभी वे बहुत कम होती हैं, एक आलसी प्रोग्रामर द्वारा मनमाने ढंग से सेट की जाती हैं, या हार्डवेयर की सीमा द्वारा निर्धारित होती हैं।

जब कोई प्रोग्रामर किसी क्षेत्र में अधिकतम वर्णों की अनुमति देता है, जैसे कि एक पते के रूप में एक निर्णय लेता है, तो इसके विपरीत सीमाएं आती हैं। यह जरूरत के अनुसार स्मृति को आवंटित करने की तुलना में कुछ मनमानी सीमा निर्धारित करना बहुत आसान है। आप सभी उपलब्ध मेमोरी को एक साधारण इनपुट फ़ील्ड में आवंटित नहीं करना चाहते हैं, लेकिन आप इनपुट को अन्य मेमोरी को अधिलेखित करने की अनुमति नहीं देना चाहते हैं जो या तो महत्वपूर्ण हो सकती है। खुली फाइलों और प्रक्रियाओं के लिए, एक मनमानी सीमा हो सकती है, या यह उपलब्ध स्मृति द्वारा सीमित हो सकती है। यदि उत्तरार्द्ध, तो खराब चीजें घटित होने लगेंगी जैसे ही आप सीमा के पास पहुंचते हैं, और सिस्टम हैंग हो सकता है, इसलिए अक्सर ऐसा होना अच्छा होता है जो सीमा से पहले होता है जो कि होता है। कभी-कभी, स्मृति या डिस्क स्थान के आधार पर स्टार्टअप में मनमानी सीमा निर्धारित की जा सकती है, और आमतौर पर काफी बुद्धिमान होते हैं,

फिर हार्डवेयर द्वारा निर्धारित सीमाएं होती हैं, जैसे कि पूर्णांक या वर्ण का आकार। यदि आपके पास 32-बिट सिस्टम है, तो एक पूर्णांक के अधिकतम आकार (4,294,967,295 यदि अहस्ताक्षरित या आधे पर हस्ताक्षर किए गए हैं) द्वारा निर्धारित सीमाएं हैं।


1
सीमाएं जो मनमाने ढंग से प्रकट होती हैं, वे वास्तव में मानकों पर आधारित हो सकती हैं। अंतर्राष्ट्रीय मानक सीमा 39 पते के लिए पोस्टल वर्ण। इस तरह की सीमा मनमानी हो सकती है। एक पते के लिए 60 अक्षरों की सीमा मनमानी होगी। दुर्भाग्य से, बहुत कम प्रोग्रामर मानकों की जांच करते हैं ताकि कई (कभी-कभी सही) सीमाएं मनमाने ढंग से तय की जा सकें।
BillThor

मैं सहमत हूँ; जब मैं अभी भी एक प्रोग्रामर के रूप में काम कर रहा था, तो मैंने कहा सीमाओं की तलाश में बहुत समय बिताया था, या तो जैसा कि आपने कहा, या ओएस में मैक्रो (जैसे कि max_path, आदि) के रूप में परिभाषित किया गया है। लेकिन मुझे यह कहना पड़ेगा कि आम तौर पर सीमाएं बिना किसी सीमा के बेहतर होती हैं, खासकर क्षेत्र की लंबाई के लिए। :)
मार्टी फ्राइड

7

प्रक्रियाओं के लिए, / proc / sys / कर्नेल / pid_max अधिकतम अनुमत pid है, इसलिए यह उन प्रक्रियाओं की संख्या की कठिन सीमा है जो किसी भी समय चल सकती हैं। हालाँकि, स्मृति पर सीमाएं आम तौर पर इससे पहले अच्छी तरह से खेल में आती हैं।

संपूर्ण मशीन पर खुली फाइलों पर ऊपरी सीमा के लिए, / proc / sys / fs / file-max कठिन सीमा है; यह मशीन में मेमोरी की मात्रा पर आधारित है, इसलिए यह अलग-अलग होगा। कर्नेल इसे सेट करता है:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

जो प्रत्येक 1 एमबी रैम के लिए लगभग 100 काम करता है।

प्रति प्रक्रिया सीमाएँ अलग हैं। ulimit इन्हें परिभाषित करेगा।


-5

हमारे पास एक सीमा है क्योंकि कंप्यूटरों की सीमाएं हैं, मेरे पास 4GB RAM है, इसलिए मैं अब 15 गेम नहीं चला सकता हूं?

मैं सबसे अधिक संभावना है कि इसे कुछ अंतराल के साथ चला सकता हूं, लेकिन यह मानव नहीं होगा, यह आपके पीसी और लिनक्स के कर्नेल पर सीमा है, आपको किसी भी प्रोग्राम को धारण करने में सक्षम होने के लिए बेहतर कर्नेल और रैम की आवश्यकता होगी ।

अपने लैपटॉप की तरह जब मैं विंडोज 7 चलाता था, तो मैं बैटलफील्ड खेल सकता था, लेकिन इसमें 80% रैम थी, इसलिए यदि मैंने "स्पीड की आवश्यकता" खेलने की कोशिश की, तो यह 60% सामान्य रूप से होता है, मैं दोनों को खोल सकता हूं, लेकिन फिर मेरा पूरा सिस्टम है जब से मैं 2 हेवी ड्यूटी प्रोग्राम चला रहा हूं, तब तक धीमा हो गया, वे दोनों रैम के लिए लड़ रहे हैं (रैंडम एक्सेस मेमोरी)

कम शब्दों में, एक सामान्य कंप्यूटर एक बार में संगीत, नोटपैड, ब्राउज़र, ईमेल, गेम जैसे कार्यक्रमों को नहीं चला सकता है, आपको लगता है कि कंप्यूटर पर एक बहुत है, लेकिन यह केवल एक गेम है, जैसे कि वर्ल्ड ऑफ Warcraft की तरह एक खेल अधिक रैम लेता है और आपका कंप्यूटर संघर्ष करता है (जब तक आपके पास 8-16 जीबी रैम नहीं है जैसे महंगे लैपटॉप करते हैं!)


प्रक्रियाओं के बारे में जानकारी के लिए धन्यवाद क्योंकि हम जानते हैं कि उच्च CPU लोड होगा यदि कई प्रक्रिया एक साथ चलेंगी, और इसे संभालने के लिए CPU कोर पर ट्रैफ़िक इतना अधिक होगा और समय के साथ आपका सिस्टम हैंग अवस्था में जाएगा, कोई उचित नहीं अगर मैं गलत नहीं हूं तो मुझे लगता है कि निष्पादित करने के लिए प्रक्रिया के किसी भी समय टुकड़ा। लेकिन लिनक्स में खुली फाइलों की सीमा भी क्यों है?
उर्फ़_लर्नर

मुझे खुली फ़ाइलों की एक सीमा के बारे में नहीं पता है, मैंने अनुभव नहीं किया है कि शायद यह मेरा कंप्यूटर है जो मेरी तुलना में सीमित है, मैं इस मामले में अनिश्चित हूं। मेरे पास हमेशा कुछ 10 फाइलें खुली रहती हैं, फिर एक वेब ब्राउजर, म्यूजिक प्लेयर और टर्मिनल ओपन होता है।
उबिसॉफ्ट टेर्ज़ुज़

यह आमतौर पर मेरे साथ तब होता है जब मेरा mysql डेटाबेस मुझे "120428 20:30:01 [ERROR] / usr / sbin / mysqld: फ़ाइल नहीं खोल सकता: './djlabo_open-cart_layout.frm' (ग़लती: 24)" का अनुसरण करता है। इसकी त्रुटि लॉग में त्रुटि है क्योंकि लिनक्स इस डेटाबेस फ़ाइल को खोलने की अनुमति नहीं दे रहा है।
18:18 बजे उर्फ़_लर्नर

यह शायद कुछ अलग waaaay है तो एक OS फ़ाइलों को खोलने के लिए सीमा।
नन्ने

1
@Terzuz यह वास्तव में इस बात पर आधारित है कि क्या लोग एक दूसरे के उत्तर को तथ्यात्मक रूप से सही मानते हैं। बहुत से लोग (मेरे सहित, दुर्भाग्य से) महसूस करते हैं जैसे कि यह उत्तर वास्तव में प्रश्न में उल्लिखित सीमाओं को संबोधित नहीं कर सकता है, लेकिन अन्य सीमाएं हैं।
मोनिका को बहाल करना - Nov--
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.