कौन सी कमांड ओपन फाइल की सीमा को नियंत्रित करती है?


19

OS X पर खुली फ़ाइल सीमा को कौन सी कमांड / कॉन्फ़िगरेशन फ़ाइल नियंत्रित करती है? क्या OS X 10.5 / 10.6 / 10.7 के लिए एक अलग कमांड है? नीचे मैंने जो विकल्प तलाशे हैं ulimit, वे हैं sysctl, औरlaunchctl

"बहुत अधिक खुली फाइलें" जाहिरा तौर पर तेंदुए पर एक सामान्य त्रुटि है, शायद ओएस एक्स के अन्य संस्करण:

खुली फ़ाइल सीमाएँ देखने के कई (संबंधित) तरीके हैं:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

उपरोक्त कुछ पोस्टों में यह दावा किया गया है कि इन्हें निम्न आदेशों के साथ संशोधित किया जा सकता है:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

हालांकि, ऊपर बताए गए आदेशों से बाहर है, केवल sysctlआदेशों किसी भी जाहिरा तौर पर प्रभाव है (यानी ulimit -nऔर launchctl limit, ऊपर बताए गए आदेशों दर्ज किया गया है के बाद कोई परिवर्तन नहीं दिखा सकते हैं जब sysctl -aअनुरोध किए गए परिवर्तन दिखाता है)।

ओएस के लिए इन मापदंडों को बदलने के लिए संबंधित स्थान हैं:

/etc/sysctl.conf
/etc/launchd.conf

मैंने एक उत्तर की भी खोज की जिसमें लिखा था कि ulimitकेवल वर्तमान शेल को नियंत्रित करता है।

मैं MacOS पर अधिकतम फ़ाइलों / अधिकतम खुली फ़ाइलों की सीमाओं को कैसे समायोजित कर सकता हूं ?

जवाबों:


9

इसका सरल उत्तर यह था कि एकाधिक सीमाएँ थीं और सबसे कम सीमा जो आप एक विशिष्ट उदाहरण में पहुँचते हैं, आपकी त्रुटि उत्पन्न करेगी। अब 10.12 launchctl limit maxfilesको भी मिक्स में है। कार्यान्वयन के विवरण के लिए, यह शानदार जवाब भरपूर मिल रहा है और जितना मैं इसे दे सकता हूं, उससे अधिक वोटों के हकदार हैं।

अन्य प्रासंगिक सूत्र हैं:

ulimitस्तर खुला फाइलों के साथ गिरी बाढ़ से एक गरीब खोल स्क्रिप्ट को रोकने के लिए कम सेट है।

kern.maxfilesperprocअधिकतम फ़ाइलों में एक छोटे से जगह नहीं छोड़ने के लिए इतना भरोसा है कि एक प्रक्रिया सबसे लेकिन सभी नहीं गिरी से खुले फ़ाइल हैंडलर अंतरिक्ष के लिए उपयोग कर सकते है।

सामान्य स्थितियों के लिए, kern.maxfilesअंतिम सीमित कारक है।

सिएरा पर - सीमाएं 256 खुली फाइलें और असीमित अधिकतम हैं, इसलिए मुझे पता चल रहा है कि नरम सीमा के लिए 3 से 4 हजार फाइलें सेट करना हमारे सभी हार्डवेयर के लिए काम करता है और अभी भी सिस्टम को उत्तरदायी रखता है जब एक भगोड़ा प्रक्रिया बहुत अधिक खुल जाती है फ़ाइलें। हम अपने विकास सर्वर को 256 सीमा पर रखना पसंद करते हैं ताकि हम उत्पादन में इसके बारे में पता लगाने के बजाय विकास / मंचन और परीक्षण में लीक और समस्याग्रस्त सॉफ़्टवेयर को पकड़ सकें।

मैं 10k फ़ाइलों का प्रशंसक नहीं हूं - शायद APFS और NVMe स्टोरेज के साथ हम उस दिन को देखेंगे जब यह अकल्पनीय नहीं है, लेकिन आपकी फ़ाइल सीमाओं के लिए सैकड़ों या कम हजारों के साथ छड़ी करने का प्रयास करें। खासकर अगर आपके मैक की कम प्रक्रिया की सीमा है , तो बहुत कम प्रक्रियाओं द्वारा खोली गई कई फाइलें समस्याग्रस्त हो सकती हैं।


9

ऐसा लगता है कि ओएस एक्स के प्रत्येक संस्करण के लिए खुली फ़ाइलों की सीमा को बदलने के लिए एक पूरी तरह से अलग विधि है।

ओएस एक्स सिएरा (10.12.X) के लिए आपको निम्न करने की आवश्यकता है:

1. में Library/LaunchDaemonsनाम की एक फ़ाइल बनाने limit.maxfiles.plistऔर में निम्नलिखित (दो संख्याओं (जो नरम और कठिन सीमा नहीं है परिवर्तित करने के लिए स्वतंत्र लग रहा है क्रमशः) पेस्ट करें:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. अपनी नई फ़ाइल के स्वामी को बदलें:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. इन नई सेटिंग्स को लोड करें:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. अंत में, जाँच लें कि सीमाएँ सही हैं:

launchctl limit maxfiles

मुझे लगता है कि दूसरे मूल्य को 'असीमित' पर सेट करके इस तरह से अधिकतम में असीमित को सेट करने में परेशानी होती है। कोई विचार?
user200857

7

निम्नलिखित सबसे आम समस्याओं को हल करना चाहिए (और उनकी पदानुक्रम के क्रम में सूचीबद्ध हैं):

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

टिप्पणियाँ:

  1. इन परिवर्तनों को प्रभावी करने के लिए आपको पुनरारंभ करना होगा।
  2. AFAIK अब आप ओएस एक्स के तहत 'असीमित' की सीमा निर्धारित नहीं कर सकते
  3. लॉन्चक्टल मैक्सफाइल्स एससीएसटीएल मैक्सफाइल्स द्वारा बंधे होते हैं, और इसलिए उन्हें पार नहीं कर सकते
  4. sysctl को लॉन्च मेर्कल से kern.maxfilesperproc विरासत में मिला है
  5. ulimit को लगता है कि यह मूलभूत रूप से लॉन्चर से 'ओपन फाइल्स' मूल्य है
  6. आप / etc / प्रोफाइल, या ~ / .profile के भीतर एक कस्टम ulimit सेट कर सकते हैं; जबकि यह आवश्यक नहीं है मैंने एक उदाहरण प्रदान किया है
  7. अपने डिफ़ॉल्ट के साथ तुलना करते समय इनमें से किसी भी मान को बहुत अधिक संख्या में सेट करते समय सतर्क रहें - सुविधाओं में स्थिरता / सुरक्षा मौजूद है। मैंने इन उदाहरण संख्याओं को लिया है जिन्हें मैं उचित मानता हूं, अन्य वेबसाइटों पर लिखा गया है।

0

सरल शब्दों में:

  • ulimitआदेश प्रदान करता है "संसाधनों खोल और प्रक्रियाओं यह बनाता है के लिए उपलब्ध पर नियंत्रण" (देखें: help ulimitऔर man bash)। शेल को दिए गए संसाधन सिस्टम संसाधन सीमाओं द्वारा सीमित हैं।

  • launchctlमौजूदा प्रक्रिया से नियंत्रण अधिकतम प्रणाली संसाधनों की खपत (देखें: man setrlimitऔर man launchctl)। अधिकतम मान कर्नेल सीमा द्वारा सीमित हैं।

  • sysctlनियंत्रण सीमा (: देखने कर्नेल man sysctlऔर बीएसडी के ट्यूनिंग कर्नेल सीमा )।

सीमा बढ़ाने के लिए, आप समस्या के आधार पर प्रत्येक कमांड का उपयोग कर सकते हैं।

यह भी देखें: `लॉन्चरल लिमिट` और` अलिमिट` के बीच क्या संबंध है?


बहुत सी खुली फ़ाइलों के साथ समस्या के लिए, यह निर्भर करता है कि बिल्कुल नरम या कठोर सीमा तक पहुँच गया है (चाहे वह स्थानीय शेल स्क्रिप्ट हो, वैश्विक स्क्रिप्ट द्वारा चलाए गए हों root, ऐप, या एक ही समय में सभी प्रक्रियाएं)। यह सभी सीमाओं (शेल, लॉन्च और कर्नेल सीमा) को बढ़ाने के लिए लायक है ।

लगातार सीमाएं बढ़ाने के लिए, देखें: मैक पर अधिकतम सिस्टम संसाधन खपत को लगातार कैसे नियंत्रित करें?

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