मैक पर अधिकतम सिस्टम संसाधन खपत को लगातार कैसे नियंत्रित करें?


85

Mavericks से पहले, मैं /etc/launchd.confउदाहरण के लिए, अधिकतम सिस्टम संसाधन खपत को बदलने के लिए फ़ाइल का उपयोग कर सकता हूं :

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

यह अब मावेरिक्स में काम नहीं करता है।

OS X के हालिया संस्करण में इसे करने का सही तरीका क्या है?


आपकी सीमा OS X के लिए अधिकतम से ऊपर है। 10240 पर मैक्सफाइल्स सबसे ऊपर है और अधिकतम सीमा 1064 है। यदि स्वीकृत जवाब सीमा तय करता है तो मैं इसे एक अंगूठे को दे दूंगा .. लेकिन यह वहाँ बैठे हुए गलत है और अच्छे वर्ष के लिए ठीक नहीं है। अब ..
जॉय टी

@atmosx: यह होना चाहिए /etc/sysctl.conf, नहीं /etc/sysctrl.conf
सियु चिंग पोंग -आसुका केंजी- 15

1
@JoeyT: वास्तव में आप इसे उच्च सीमा पर सेट कर सकते हैं! लेकिन आपको "OS X Server" को "App Store" से खरीदना होगा, यदि आप Mac OS X 10.8 (माउंटेन लायन) या 10.9 (Mavericks) पर हैं। (हाँ, आपको एक सेटिंग बदलने के लिए $ 19.99 USD का भुगतान करना होगा!) संक्षेप में, आपको sudo serverinfo --setperfmode trueअपनी मशीन को "सर्वर प्रदर्शन मोड" में डालने के लिए एक बार चलाना होगा । फिर, आपके पास मशीन कॉन्फ़िगरेशन के आधार पर "उच्च अधिकतम" है। कृपया मेरी पोस्ट देखने discussions.apple.com/thread/5166397 जानकारी के लिए। 10.10 (Yosemite) के लिए, मोड डिफ़ॉल्ट रूप से चालू है (कम से कम मेरी मशीन पर!)। नीचे मेरा जवाब देखें।
सियु चिंग पोंग -आसुका केंजी-

जवाबों:


87

शैल सत्र सीमा

सीमा के माध्यम से सेट ulimitकेवल वर्तमान खोल सत्र के द्वारा बनाई गई प्रक्रियाओं को प्रभावित करता है।

  • "सॉफ्ट लिमिट" वास्तविक सीमा है जिसका उपयोग किया जाता है। यह सेट किया जा सकता है, जहाँ तक यह "कठिन सीमा" से अधिक नहीं है।
  • "हार्ड सीमा" को भी सेट किया जा सकता है, लेकिन केवल वर्तमान वाले से कम मूल्य पर, और केवल "सॉफ्ट लिमिट" से कम मूल्य पर।
  • "हार्ड लिमिट", साथ ही सिस्टम-वाइड लिमिट्स, rootसिस्टम कॉन्फ़िगरेशन कमांड्स को निष्पादित करके (सिस्टम कॉन्फिगरेशन फाइल को संशोधित करके) बढ़ाया जा सकता है ।

आप खोल सत्र समाप्त होने के बाद (द्वारा Ctrl+ D, exitया बंद करने Terminal.appखिड़की, आदि), सेटिंग्स चले गए हैं। यदि आप अगले शेल सत्र में एक ही सेटिंग चाहते हैं, तो सेटिंग को शेल स्टार्टअप स्क्रिप्ट में जोड़ें।

नोट: यदि आप उपयोग कर रहे हैं bash, तो यह होना चाहिए ~/.bash_proileया ~/.bash_login। यदि आप अन्य गोले का उपयोग कर रहे हैं, तो यह संभवतः होना चाहिए ~/.profile

सिस्टम सीमा (प्रभावी होने के लिए रिबूट की आवश्यकता है)

10.9 (मावेरिक्स), 10.10 (योसेमाइट), 10.11 (एल कैपिटन), और 10.12 (सिएरा):

आपको एक फ़ाइल बनाना होगा /Library/LaunchDaemons/limit.maxfiles.plist(स्वामी:, root:wheelमोड:) 0644:

<?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>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

आपको अपनी जरूरत के हिसाब से नंबर बदलने चाहिए। वे "सॉफ्ट लिमिट" ( 262144) हैं और 524288क्रमशः "हार्ड लिमिट" ( ) है। अधिक जानकारी के लिए, मैनुअल पेज को चलाकर देखें man launchd.plist

10.8 (माउंटेन लायन) के लिए:

आप निम्न पंक्तियों को इसमें जोड़ सकते हैं /etc/sysctl.conf(स्वामी:, root:wheelमोड:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

आपको अपनी जरूरत के हिसाब से नंबर बदलने चाहिए। वे क्रमशः "सिस्टम-वाइड लिमिट" ( kern.maxfiles) और "प्रति-प्रोसेस लिमिट" ( kern.maxfilesperproc) हैं। अधिक सेटिंग्स के लिए, रन करके मैनुअल पेज से परामर्श करें man sysctl, या स्रोत कोड पढ़ें /usr/include/sys/sysctl.h

पुराने मैक ओएस एक्स के लिए (मुझे लगता है कि यह 10.7 (सिंह) या उससे पहले काम करता है):

आप निम्न पंक्ति को जोड़ सकते हैं /etc/launchd.conf(स्वामी:, root:wheelमोड:) 0644:

limit maxfiles 262144 524288

आपको अपनी जरूरत के हिसाब से नंबर बदलने चाहिए। वे "सॉफ्ट लिमिट" ( 262144) हैं और 524288क्रमशः "हार्ड लिमिट" ( ) है।

यदि सिस्टम आपको एक निश्चित मान से ऊपर की सीमा निर्धारित नहीं करने देता है ...

सिस्टम आपको "हार्ड मैक्स" (Apple द्वारा प्रस्तावित) से अधिक मूल्य निर्धारित करने की अनुमति नहीं देता है। इस "हार्ड अधिकतम" को बढ़ाने के लिए, आपको "ओएस एक्स सर्वर" को "ऐप स्टोर" से खरीदना होगा, फिर आपको निम्नलिखित कमांड को एक बार निष्पादित करना होगा:

sudo serverinfo --setperfmode true

यह आपकी मशीन पर "सर्वर प्रदर्शन मोड" को सक्रिय करता है। फिर आप अपनी मशीन के विन्यास के अनुसार अधिकतम सेट कर सकते हैं (इसे देखें) । मैंने पहले (पर्वत और मावेरिक्स पर) यह कोशिश की और यह काम करता है! कृपया अधिक जानकारी के लिए मेरी पोस्ट ( यहां ) देखें।

संदर्भ


1
धन्यवाद; मैं Yosemite और LaunchDaemon plist तकनीक का उपयोग कर रहा हूं। मेरा मानना ​​है कि यह केवल एक ही है जो करता है। जिस किसी को भी इसकी आवश्यकता है, कृपया ध्यान दें कि इसके प्रभावी होने के लिए रिबूट आवश्यक है
एन.सी.

1
@nc। : मेरे उत्तर के लिए "रिबूट टू टेक इफेक्ट" की आवश्यकता थी। मैं क्षेत्र में बहुत लंबे समय से काम कर रहा हूं, इसलिए मुझे इस बात की जानकारी नहीं थी कि कुछ लोग यह नहीं जानते हैं। याद दिलाने के लिए धन्यवाद!
सियु चिंग पोंग -आसुका केंजी-

2
मैं 10.9.5 का उपयोग कर रहा हूं, लेकिन /etc/launchd.confजब मैं चलता हूं तो केवल दृष्टिकोण ही कोई प्रभाव दिखाता है ulimit -n। क्या कोई निर्देशों को अद्यतन कर सकता है यदि यह महत्वपूर्ण है?
श्रीधर सरनोबत

1
10.10 योसेमाइट विधि 10.11 एल कैपिटान में भी काम करती है। यद्यपि मैं इसे "असीमित" पर सेट नहीं कर सकता था, इसलिए मुझे बस एक बहुत ही उच्च संख्या का उपयोग करना था
एंटीवायर

1
@aolszowka: इस सीमा को बढ़ाने के लिए इसे देखें /etc/sysctl.conf: superuser.com/questions/827984/…
रोब जोहान्स

11

ऐसा लगता है कि फ़ाइल बनाना /etc/launchd.confऔर अपने कमांड को इसके अंदर डालकर चाल करना चाहिए।


यदि यह काम नहीं करता है, तो आप संभवतः /etc/rc.localफ़ाइल को संपादित या बना सकते हैं और इसके अंदर अपनी कमांड जोड़ सकते हैं क्योंकि इस बात की बहुत कम संभावना है कि ऐप्पल कभी भी कमांड लाइन पर सीमा के लिए समर्थन हटा देगा।


संपादित करें 1 :
मुझे उसके साथ शुरू करना चाहिए, launchd मैन पेज निम्नलिखित फाइलों को संदर्भित करता है:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

मेरे शर्त है कि आप या तो में अपने आदेश लगाने की जरूरत है ~/Library/LaunchAgentsया में /Library/LaunchDaemons
आपको दोनों को आजमाना चाहिए।

संपादित करें 2 :
यह भी ध्यान रखें कि लॉन्च की जरूरत है xml फ़ाइल और न केवल स्क्रिप्ट। एक गुई इस तरह के कार्य में मदद करने के लिए एक नि: शुल्क एक लिंगोन है । शायद अन्य मुफ्त उत्पाद मौजूद हों।


जैसा कि मेरी पोस्ट में बहुत सी जानकारी है, क्या आप बता सकते हैं कि कौन सी अच्छी थी?
कीवी

नीचे मेरा जवाब देखें।
होवार्ड

दोनों /etc/launchd.confऔर /etc/rc.local10.10 में अनदेखी कर रहे हैं और बाद में, के बाद से में 10.10 launchd बदल दिया गया और SystemStarter हटा दिया गया था।
निसेतमा

@ मेरे ओएस को अपडेट करने के लिए स्वतंत्र महसूस करें अगर मैक ओएस के हालिया संस्करण में कुछ नया आया है
किवी

10

मैंने अपने .bash_profile
काम में इन दो पंक्तियों को एक आकर्षण की तरह जोड़ा

ulimit -n 1024
ulimit -u 1024

2
सिस्टम सीमा को प्रभावित नहीं करता है।
not2savvy

1
हालाँकि, यह ठीक हो सकता है यदि आपके सिस्टम की सीमा काफी अधिक है। यह जाँचने के लिए कि वे क्या हैं आप बस चला सकते हैं ulimit -n -H। मैकओएस हाई सिएरा पर यह चाल unlimitedमें उपयोगकर्ता की "नरम" सीमा को बदल रहा था .bash_profile
जोशुआ पिंटर

9

सिस्टम की सीमा

हाल ही में macOS के लिए सीमा में परिवर्तन करना /etc/launchd.confया /etc/rc.localसमर्थित नहीं है। देखें: पुरानी प्रणाली और प्रौद्योगिकी

इसके बजाय, आपको एक नया लॉन्च एजेंट बनाना चाहिए ।

यहाँ कमांड का उपयोग करके कमांड उदाहरण PlistBuddyदिया गया है (देखें:) man PlistBuddy:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

और maxprocसीमा के लिए समान :

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

फ़ाइलों के ऊपर लोड करने के लिए, चलाएँ sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist:।

टिप्पणियाँ:

  • फ़ाइल को प्रिंट करने के लिए, चलाएँ: catया PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist
  • लोड के दौरान किसी भी त्रुटि के लिए लॉग की जांच करने के लिए, चलाएँ tail -f /var/log/system.log:।
  • वर्तमान launchdसीमाएँ देखने के लिए , चलाएँ launchctl limit:।
  • .plistफ़ाइल प्रति-उपयोगकर्ता या सिस्टम-वाइड एजेंट फ़ोल्डर (में रखा जा सकता LaunchAgents)। देखें: man launchdऔर man launchd.plist, या यह या कि अधिक विवरण के लिए उत्तर दें।

कर्नेल सीमा

कृपया ध्यान दें कि लॉन्च किए गए सिस्टम से ऊपर की सीमाएं अभी भी कर्नेल द्वारा सीमित हैं, इसलिए आप उन्हें कर्नेल स्थिति चर में निर्धारित वास्तविक सीमाओं से अधिक नहीं सेट कर सकते हैं (देखें: man sysctlसहायता के लिए)।

वर्तमान कर्नेल सीमाएँ देखने के लिए, चलाएँ sysctl -a | grep ^kern.max:।

maxfilesसीमा बढ़ाने के लिए, चलाएँ sudo sysctl -w kern.maxfiles=20480:।

उन्हें बनाए रखने के लिए .plist, स्टार्टअप फ़ाइलों जैसे बनाने के लिए इसी तरह की विधि का उपयोग करें

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

खोल की सीमा

शेल सीमाओं के लिए, व्यक्तिगत उपयोगकर्ता या सभी उपयोगकर्ताओं के लिए प्रासंगिक ulimitकमांड को ~/.bashrcया ~/.bash_profileस्टार्टअप फ़ाइल में जोड़ें /etc/bashrc। देखें: मैक पर लगातार शेल ulimit सेटिंग्स कैसे जोड़ें?

जोड़ने के लिए सुझावित लाइनें:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
विशेष रूप से सावधान रहें maxprocक्योंकि डिफ़ॉल्ट रूप से उस पैरामीटर पर हार्ड कर्नेल सीमा 1064 है, जिसका अर्थ है कि इसे 2000 या "असीमित" पर सेट करना वास्तव में इसे केवल 1064 पर सेट करता है। दुर्भाग्य से, कर्नेल इसे लागू नहीं करता है maxprocperuid < maxproc, और आपके द्वारा सुझाई गई सेटिंग्स को छोड़ देगा। प्रणाली के साथ maxprocperuid=2000और maxproc=1064जो खतरनाक है। इसके बारे में यहाँ और पढ़ें ।
पुराने प्रो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.