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


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

sudo ulimit -n 12288 बर्फ तेंदुए के रूप में जाना चाहता है के रूप में उच्च है; इन परिणामों से परे

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

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


96
2018-06-27 10:56


मूल


ओएसएक्स मैवरिक्स में इस प्रश्न के उत्तर अब काम नहीं करते हैं। - Howard
चल रहा है echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf और मैवरिक्स में मेरे लिए काम फिर से शुरू करना। - user495470


जवाब:


का उपयोग करते हुए 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-बिट मोड मदद कर सकता है।


90
2018-06-27 21:17



sudo launchctl limit maxfiles 1000000 unlimited "Maxfiles" के लिए न तो हार्ड और न ही नरम सीमा असीमित हो सकती है। कृपया दोनों के लिए एक संख्यात्मक पैरामीटर का उपयोग करें। - Thomas Hunter
उस पंक्ति को जोड़ते समय सावधान रहें launchd.conf। मुझे लगता है कि यदि संख्या बहुत छोटी है, तो यह आपके कंप्यूटर को अनुपयोगी बना सकती है। उदाहरण के लिए, मैंने इस्तेमाल किया limit maxfiles 1024 1024 और मुझे इसे वापस बदलने में वास्तव में कठिन समय था। - Shawn
हां: "/etc/launchd.conf फ़ाइल को प्रारंभिक बूट समय के दौरान चलाने के लिए उप-कॉमांड के लिए परामर्श नहीं दिया गया है; सुरक्षा कार्यक्षमताओं के लिए यह कार्यक्षमता हटा दी गई थी।" - Alice Purcell
यह काम नहीं करता है, अगर मैं ulimit -Sn 10240 सफलतापूर्वक सेट करता हूं तो भी मेरा एफडी नंबर 6k से अधिक नहीं हो सकता है। - Jian Weihang
@JianWeihang fd संख्या प्रति-प्रक्रिया हैं इसलिए मुझे लगता है कि अन्य प्रक्रियाएं 4000 फाइलें खुली हैं। क्या आप क्रोम चलाने के लिए होते हैं? ;) - Trejkaz


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

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

41
2017-12-03 12:07



हां: "/etc/launchd.conf फ़ाइल को प्रारंभिक बूट समय के दौरान चलाने के लिए उप-कॉमांड के लिए परामर्श नहीं दिया गया है; सुरक्षा कार्यक्षमताओं के लिए यह कार्यक्षमता हटा दी गई थी।" - Alice Purcell


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

ओएस एक्स सिएरा के लिए (10.12.एक्स) आपको यह करना होगा:

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

28
2018-01-24 14:50



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


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

% 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

20
2017-12-10 10:11



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


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

7
2017-09-04 15:44



अपने समाधान को संशोधित करने पर विचार करें। आप 1024 का अल्मिमिट सेट कर रहे हैं, फिर आउटपुट फ़ाइल डिस्क्रिप्टर को 8192 के रूप में दिखाएं (1024 होना चाहिए)। आप दृष्टिकोण हैं सुडो के बिना भी प्रोबेलमैटिक, इसे अपने लिए कुछ बार बदलने का प्रयास करें। - y3sh
सूडो का उपयोग यहां नहीं किया जाना चाहिए लेकिन यह जवाब गलत है। Mavericks उपयोगकर्ताओं का उपयोग करना चाहिए echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf और फिर अपनी मशीन को पुनरारंभ करें - Kyle Chadha


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

sudo launchctl limit maxfiles 100000 unlimited

कृपया ध्यान दें कि इन सीमाओं को लागू करना /etc/launchd.conf (जैसा कि अन्य उत्तरों में सुझाया गया है) हाल ही में मैकोज़ रिलीज़ में समर्थित नहीं है। हालांकि अभी भी उपयोग कर सकते हैं 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 सेटिंग्स कैसे बने रहें?


0
2017-07-29 13:27