Ulimit -n और / proc / sys / fs / file-max कैसे भिन्न हैं?


32

मुझे लगता है कि एक नई CentOS छवि है कि मैं सिर्फ EC2 से दूर है कि ulimit डिफ़ॉल्ट 1024 खुली फ़ाइलों को बूट किया है, लेकिन / proc / sys / fs / फ़ाइल अधिकतम 761,408 पर सेट है और मैं सोच रहा हूँ कि कैसे इन दो सीमाओं काम साथ में। मैं अनुमान लगा रहा हूं कि ulimit -n फाइल-डिस्क्रिप्टर की संख्या की प्रति-उपयोगकर्ता सीमा है, जबकि / proc / sys / fs / file-max सिस्टम-वाइड है? अगर ऐसा है, तो कहें कि मैंने एक ही उपयोगकर्ता के रूप में दो बार लॉग इन किया है - क्या प्रत्येक लॉग-इन उपयोगकर्ता के पास खुली फ़ाइलों की संख्या पर 1024 सीमा है, या क्या यह लॉग किए गए प्रत्येक के बीच 1024 संयुक्त खुली फ़ाइलों की सीमा है- उपयोगकर्ताओं में

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


जोड़े गए टैग: बैश लिनक्स कर्नेल सिस्टम-संसाधन
वार्नर

जवाबों:


28

file-maxएक कर्नेल स्तर पर लागू अधिकतम फ़ाइल डिस्क्रिप्टर्स (एफडी) है, जिसे बढ़ाए बिना सभी प्रक्रियाओं को पार नहीं किया जा सकता है। ulimitप्रक्रिया स्तर है, जो कम से कम किया जा सकता है पर लागू की जाती है file-max

वृद्धि से कोई प्रदर्शन प्रभाव जोखिम नहीं है file-max। आधुनिक वितरणों में अधिकतम एफडी बहुत अधिक है, जबकि अतीत में इसे 1024 तक बढ़ाने के लिए कर्नेल पुनर्संरचना और संशोधन की आवश्यकता होती है। मैं तब तक सिस्टम-वाइड नहीं बढ़ाता जब तक कि आपको तकनीकी आवश्यकता न हो।

प्रति-प्रक्रिया कॉन्फ़िगरेशन को अक्सर किसी विशेष डेमन की सेवा के लिए ट्यून करने की आवश्यकता होती है, चाहे वह डेटाबेस या वेब सर्वर हो। यदि आप पूरी तरह से सीमा को हटा देते हैं, तो डेमन संभावित रूप से सभी उपलब्ध सिस्टम संसाधनों को समाप्त कर सकता है; मतलब आप रीसेट बटन या पॉवर साइकलिंग को छोड़कर समस्या को ठीक करने में असमर्थ होंगे। बेशक, उन दोनों में से किसी के भी किसी भी खुली फ़ाइलों के भ्रष्टाचार के परिणामस्वरूप होने की संभावना है।


क्या मेरी समझ सही है, कि प्रति-उपयोगकर्ता सीमा का उपयोग करके सभी उपयोगकर्ताओं के लिए समान हैं? प्रति उपयोगकर्ता विभिन्न मूल्यों का उपयोग करने का एक तरीका है या नहीं?
ओलिवर

हां, सेटिंग्स को विश्व स्तर पर और प्रति उपयोगकर्ता आधार पर दोनों सेट किया जा सकता है।
वार्नर

अगर मुझे आपकी पोस्ट सही लगे, तो यह सच नहीं है। यह उपयोगकर्ता xy द्वारा
बताई

3
ulimitसीमा प्रति उपयोगकर्ता नहीं है, लेकिन प्रक्रिया के अनुसार! देखें unix.stackexchange.com/questions/55319/...
Tonin

@ टोनिन - हां, यह जवाब गलत है।
निमो

11

Ulimit की सीमा प्रति अद्वितीय उपयोगकर्ता है। तो उपयोगकर्ता 1, चाहे कितनी भी बार लॉग इन या प्रक्रियाओं को चलाने के लिए, 1024 तक सीमित होगा। यह संयुक्त है।

मुझे यकीन नहीं है कि अगर मैं उस वाक्य का अर्थ पूरी तरह से समझता हूं (अंग्रेजी मेरी मातृभाषा नहीं है) यदि उस वाक्य का अर्थ है कि फाइल डिस्क्रिप्टर के लिए ulimit कॉन्फ़िगरेशन एक प्रति-प्रक्रिया सीमा नहीं है, तो स्वीकृत उत्तर (AFAIK) गलत है।

मेरा क्या मतलब है, अगर कुछ उपयोगकर्ता ने 4 प्रक्रियाएं शुरू की हैं और FD के लिए ulimit कॉन्फ़िगरेशन 1024 है, प्रत्येक प्रक्रिया 1024 FD खोल सकती है। उपयोगकर्ता 1024 एफडी तक सीमित नहीं होगा, लेकिन जो प्रक्रियाएं उस उपयोगकर्ता द्वारा लॉन्च की जाती हैं।

उदाहरण के लिए:

me@superme:~$ ulimit -n
1024
me@superme:~$ lsof | grep $USER | wc -l
8145

यहां एक पर्ल उदाहरण है जहां हम सीमा तक पहुंचते हैं (यह एक प्रति-प्रक्रिया सीमा है):

#!/usr/bin/perl

$count = 0;
@filedescriptors;

while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}

परिणाम:

FDs: 1021 Too many open files at ./test.pl line 8.

1021 क्योंकि लूप (स्टडआउट, स्टडिन और स्टेडर) तक पहुंचने से पहले 3 खुले फ़ाइल विवरण थे

क्षमा करें यदि मैं पूरी तरह से गलत हूं या मैंने जवाब को गलत समझा।


तो, आप सही हैं। @ वार्नर की प्रतिक्रिया इस अर्थ में गलत है क्योंकि सीमा एक प्रति-प्रक्रिया के आधार पर है और प्रति-उपयोगकर्ता नहीं है
filipenf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.