स्नो लेपर्ड में खुले फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या बढ़ाएँ?


101

मैं कुछ ऐसा करने की कोशिश कर रहा हूं जिसके लिए बड़ी संख्या में फाइल डिस्क्रिप्टर की आवश्यकता है

sudo ulimit -n 12288स्नो लेपर्ड जितना ऊंचा जाना चाहता है; में इस परिणाम से परे है

/ usr / bin / ulimit: पंक्ति 4: ulimit: खुली हुई फाइलें: सीमा को संशोधित नहीं कर सकती: अमान्य तर्क।

मैं 100000 की संख्या को बहुत अधिक बढ़ाना चाहता हूं। क्या यह संभव है?


4
इस सवाल का जवाब अब OSX Mavericks में काम नहीं करता है।
हावर्ड

2
echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confMavericks में मेरे लिए काम करना और चलाना ।
लारी

जवाबों:


95

ulimitकमांड का उपयोग केवल वर्तमान शेल और उसके बच्चों के लिए संसाधन सीमा को बदलता है और sudo ulimitएक रूट शेल बनाता है, इसकी सीमा को समायोजित करता है, और फिर बाहर निकलता है (इस प्रकार होने पर, जहां तक ​​मैं देख सकता हूं, कोई वास्तविक प्रभाव नहीं है)।
12288 से अधिक करने के लिए, आपको कर्नेल के मापदंडों kern.maxfilesऔर kern.maxfilesperprocमापदंडों को समायोजित करने की आवश्यकता है , और यह भी (कम से कम इस ब्लॉग प्रविष्टि के अनुसार , जो इस चर्चा का सारांश है ) एक लॉन्च की गई सीमा। आप launchctl limitएक बार में इन सभी को समायोजित करने के लिए उपयोग कर सकते हैं :

sudo launchctl limit maxfiles 1000000 1000000

इसे स्थायी बनाने के लिए (जब आप रिबूट नहीं करते हैं, तो रीसेट करें), /etc/launchd.confजिसमें बनाएं :

limit maxfiles 1000000 1000000

फिर आप अपनी प्रक्रिया की सीमा को समायोजित करने के लिए ulimit(लेकिन बिना sudo) का उपयोग कर सकते हैं ।

यदि यह ऐसा नहीं करता है, तो आप कर्नेल में आकार सीमा में चल सकते हैं। यदि आपका मॉडल इसका समर्थन करता है , तो 64-बिट मोड में कर्नेल को बूट करने से मदद मिल सकती है।


1
sudo launchctl limit maxfiles 1000000 unlimited"मैक्सफाइल्स" के लिए न तो कठिन और न ही नरम सीमा असीमित हो सकती है। कृपया दोनों के लिए एक संख्यात्मक पैरामीटर का उपयोग करें।
थॉमस हंटर

2
उस पंक्ति को जोड़ते समय सावधान रहें launchd.conf। मुझे लगता है कि यदि संख्या बहुत कम है, तो यह आपके कंप्यूटर को अनुपयोगी बना सकता है। उदाहरण के लिए, मैंने उपयोग किया limit maxfiles 1024 1024और मेरे पास इसे वापस बदलने में वास्तव में कठिन समय था।
शॉन

1
काश: "/etc/launchd.conf फ़ाइल को अब शुरुआती बूट समय में चलाने के लिए उप-प्रक्षेत्रों के लिए परामर्श नहीं दिया जाता है; यह कार्यक्षमता सुरक्षा कारणों से हटा दी गई थी।"
ऐलिस परसेल

यह काम नहीं करता है, मेरी fd संख्या 6k से अधिक नहीं हो सकती है, भले ही मैंने ulimit सेट किया हो -Sn 10240 सफलतापूर्वक।
जियान वेहंग

@ जियांवेहंग एफडी नंबर प्रति-प्रक्रिया है इसलिए मुझे लगता है कि अन्य प्रक्रियाएं 4000 फाइलें खुली होने के कारण हुईं। क्या आप क्रोम चलाना चाहते हैं? ;)
तर्जुक

41

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

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. लगता है कि यह डिफ़ॉल्ट रूप से लॉन्चक्टल से 'ओपन फाइल्स' मूल्य है
  6. आप / etc / प्रोफाइल, या ~ / .profile के भीतर एक कस्टम ulimit सेट कर सकते हैं; जबकि यह आवश्यक नहीं है मैंने एक उदाहरण प्रदान किया है
  7. अपने डिफ़ॉल्ट के साथ तुलना करते समय इनमें से किसी भी मान को बहुत अधिक संख्या में सेट करते समय सतर्क रहें - सुविधाओं में स्थिरता / सुरक्षा मौजूद है। मैंने इन उदाहरण संख्याओं को लिया है जिन्हें मैं उचित मानता हूं, अन्य वेबसाइटों पर लिखा गया है।

3
काश: "/etc/launchd.conf फ़ाइल को अब शुरुआती बूट समय में चलाने के लिए उप-प्रक्षेत्रों के लिए परामर्श नहीं दिया जाता है; यह कार्यक्षमता सुरक्षा कारणों से हटा दी गई थी।"
ऐलिस परसेल

34

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

ओएस एक्स सिएरा (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

2
यह उत्तर बहुत अच्छा है, और मुझे इसे यहाँ जोड़ने के लिए कुछ पृष्ठभूमि मिली, @ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan
डीन रेडक्लिफ़

20

ऐसा लगता है कि ओएस एक्स लायन मूल्य के रूप में "असीमित" की अनुमति नहीं देगा:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

नरम और कठिन सीमा दोनों के लिए संख्यात्मक मान प्रदान करना काम करता है:

% sudo launchctl limit maxfiles 4096 8192

3
यदि मानों में से एक असीमित था , तो -1मान परिणाम के रूप में उपयोग करना 12288। बड़े संख्यात्मक मानों का उपयोग करना संभव है, जैसे sudo launchctl limit maxfiles 15000 150000। मुझे यकीन नहीं है कि इन सेटिंग्स का प्रभाव फिर भी होगा।
डैनियल बेक

8

Mavericks पर अपने सरल। एक नियमित उपयोगकर्ता के रूप में:

ulimit -n 8192

आप के माध्यम से अद्यतन सेटिंग्स की जाँच कर सकते हैं

ulimit -a

मेरी मशीन पर:

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                8192

2
अपने समाधान को संशोधित करने पर विचार करें। आप 1024 का एक ulimit सेट कर रहे हैं, फिर आउटपुट फाइल डिस्क्रिप्टर को 8192 (1024 होना चाहिए) दिखा रहा है। आप दृष्टिकोण सूदो के बिना भी संभावित हैं, इसे अपने लिए कुछ समय बदलने की कोशिश करें।
y3sh

1
सूडो का उपयोग यहां नहीं किया जाना चाहिए लेकिन यह उत्तर गलत है। मावेरिक्स उपयोगकर्ताओं का उपयोग करना चाहिए echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confऔर फिर अपनी मशीन को फिर से चालू करना चाहिए
काइल चड्ढा

3

पर ओएस एक्स 10.13.6 यह मेरे लिए काम करता है:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

1

कुछ सीमाओं को बदला नहीं जा सकता है ulimit, क्योंकि वे केवल वर्तमान शेल पर लागू होते हैं, इसलिए launchctlकमांड का उपयोग विश्व स्तर पर सीमाओं को बदलने के लिए किया जाना चाहिए, जैसे

sudo launchctl limit maxfiles 100000 unlimited

कृपया ध्यान दें कि इन सीमाओं को लागू करना /etc/launchd.conf(जैसा कि अन्य उत्तरों में सुझाव दिया गया है) अब हाल के macOS रिलीज़ में समर्थित नहीं है। हालांकि अभी भी उपयोग कर सकते हैं launchd.plist(देखें: man launchd.plist) इस तरह के प्रति-उपयोगकर्ता या सिस्टम-वाइड के रूप में plistविन्यास फाइल के रूप में सुझाव यहाँ , वहाँ , और अधिक वहाँ


इन सीमाओं को लगातार बनाए रखने के लिए, आप /etc/sysctl.confफ़ाइल का उपयोग कर सकते हैं और उदाहरण के लिए जोड़ सकते हैं :

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

प्रभाव लेने के लिए परिवर्तनों के लिए, इसे रिबूट की आवश्यकता होती है।

वर्तमान सीमाओं को देखने के लिए, दौड़ें: launchctl limitया sysctl -a | grep ^kern.max

यह भी देखें: मैकओएस में ulimit सेटिंग्स कैसे जारी रखें?

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