मुझे OS X 10.7.1 पर "सिस्टम में बहुत अधिक खुली फाइलें" सीमा से pesky से छुटकारा पाने की आवश्यकता है।
क्या उधर रास्ता है?
मुझे OS X 10.7.1 पर "सिस्टम में बहुत अधिक खुली फाइलें" सीमा से pesky से छुटकारा पाने की आवश्यकता है।
क्या उधर रास्ता है?
जवाबों:
इस सहायक लेख के अनुसार (जो मैं पढ़ने की सलाह देता हूं):
डिफ़ॉल्ट रूप से, मैक ओएस एक्स को खोलने वाली फ़ाइलों की अधिकतम संख्या 12,288 पर सेट हो सकती है और किसी दी गई प्रक्रिया की अधिकतम संख्या 10,240 हो सकती है।
आप इनसे जांच कर सकते हैं:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
आप (अपने जोखिम पर) सीमा बढ़ा सकते हैं:
sysctl -w kern.maxfiles=20480
(या जो भी संख्या आप चुनते हैं)sysctl -w kern.maxfilesperproc=18000
(या जो भी संख्या आप चुनते हैं)परिवर्तन को स्थायी बनाने के लिए, sudo
अपनी सेटिंग्स /etc/sysctl.conf
(जो आपको बनानी पड़ सकती हैं) को इस तरह से उपयोग करने के लिए इस तरह से करें:
kern.maxfiles=20480
kern.maxfilesperproc=18000
नोट: OS X 10.10 या उससे कम में, आप सेटिंग को इस /etc/launchd.conf
तरह से जोड़ सकते हैं limit maxfiles
और यह आपके द्वारा यहां रखी गई चीजों को ओवरराइड करेगा।
फिर से, लेख से:
एक बार जब आप यह कर लेते हैं, तो कर्नेल में अधिकतम फ़ाइलों की संख्या होगी, लेकिन शेल नहीं हो सकता है। और चूंकि अधिकांश प्रक्रियाएँ जो इसे उठाएंगी, वे कई फाइलें हैं जो उस शेल द्वारा शुरू की जाने वाली हैं जिसे आप बढ़ाना चाहते हैं।
इसके लिए आदेश है:
ulimit -S -n 2048 # or whatever number you choose
वह परिवर्तन भी अस्थायी है; यह केवल वर्तमान शेल सत्र के लिए रहता है। आप इसे अपने शेल कॉन्फ़िगरेशन फ़ाइल में जोड़ सकते हैं ( या .bashrc
, .zshrc
जो भी हो) यदि आप चाहते हैं कि यह हर बार खोलते समय आप चलाएं।
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf में डाला और रिबूट किया। kern.maxfiles को अनदेखा किया गया और डिफ़ॉल्ट रूप से रहा, लेकिन kern.maxfilesperproc को 65000 पर सेट किया गया। मेरे पास कोई /etc/launchd.conf नहीं है इसलिए इसके साथ क्या हो रहा है?
ऐसा लगता है कि ओएस एक्स के प्रत्येक संस्करण के लिए खुली फ़ाइलों की सीमा को बदलने के लिए एक पूरी तरह से अलग विधि है!
ओएस एक्स सिएरा (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
IO Error: Bad file descriptor (Write failed)
आपको अपनी ulimit सेटिंग्स को बढ़ाने की आवश्यकता होगी - यह इन दिनों OS X पर बहुत कम है - डिफ़ॉल्ट रूप से 256। ulimit -n 4096
अपने ~ / .profile या समकक्ष को जोड़ें या समान करें और जो आपके स्थानीय परिवेश में इसे हल करेगा। ulimit -a
अपने वर्तमान स्तरों की जाँच करने के लिए चलाएँ
सिस्टम सेटिंग्स देखने के लिए, इसे चलाएं:
launchctl limit maxfiles
यह प्रति प्रक्रिया के आधार पर लायन (10240) में काफी हद तक सेट किया गया है, जो पहले हुआ करता था। लेकिन अगर आप अभी भी इसे वहां मार रहे हैं, तो आप वांछित स्तरों के साथ एक ही कमांड का उपयोग करके इसे उच्चतर सेट कर सकते हैं। परिवर्तनों को स्थायी करने के लिए /etc/launchd.conf वह स्थान है जहाँ आपको संबंधित पंक्तियों को जोड़ना होगा।
ulimit -a
) है।
अन्य विकल्प अपराधी को ढूंढना हो सकता है:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
पिछले एक के लिए आप देख सकते हैं कि क्या फाइलें खुली हैं:
sudo lsof -n | grep socketfil
और अगर वांछित है तो प्रक्रिया को मार डालो
kill $pid
टिप्पणियों से:
इसके लायक क्या है, आप उपयोग की जाने वाली सबसे खुली फाइलों के साथ प्रक्रिया आईडी की सूची भी प्राप्त कर सकते हैं
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
ट्रंचिंग प्रक्रिया नाम को रोकने के लिए उपयोग करें ।
दोस्तों, Mavericks पर 10.9.4
ulimit -n 2048
ठीक काम करता है। आपको एक नया लॉगिन सत्र शुरू करने की आवश्यकता हो सकती है।
नवीनतम macOS के लिए sudo launchctl limit maxfiles 64000 524288
( लेखन के समय: 10.14.1), आप उपयोग कर सकते हैं (डिफ़ॉल्ट रूप से यह 256 था), लेकिन यह केवल वर्तमान सत्र के भीतर ही काम करता है। स्थायी समाधान के लिए launchctl
@ninjaPixel ( https://superuser.com/a/1171028/760235 ) से नौकरी का उपयोग करें ।
तुम दौड़ सकते हो
lsof -n
कौन सी प्रक्रिया बहुत सारी फाइलें खोलती है।
फिर इसे मार डालो।
या
sysctl -w kern.maxfiles=20480
इसे बड़ा कर दो।
मेरे जावा के ऊपर सभी परिवर्तनों के बाद 10000 से अधिक फाइलें नहीं बनीं। समाधान यह jvm ध्वज -XX था: -MaxFDLimit
मैंने एक चामोद -R करते हुए इसका सामना किया, इसलिए मैंने इसे छोटे-छोटे कदम उठाते हुए प्राप्त किया, उदा
# for each directory
find . -type d -exec chmod 755 {} \;
Https://superuser.com/a/1171028/367819 के समान
अपने Mac OS X सिस्टम पर वर्तमान सीमाओं की जाँच करने के लिए, चलाएँ:
launchctl limit maxfiles
अंतिम दो कॉलम क्रमशः नरम और कठोर सीमाएँ हैं।
मैक ओएस एक्स योसेमाइट में सिस्टम-वाइड आधार पर खुली फ़ाइलों की सीमा को समायोजित करने के लिए, आपको दो कॉन्फ़िगरेशन फ़ाइलों को बनाना होगा। पहली संपत्ति सूची (उर्फ प्लिस्ट) फ़ाइल /Library/LaunchDaemons/limit.maxfiles.plist में है जो निम्न XML कॉन्फ़िगरेशन में शामिल है:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
यह 200000 के लिए खुली हुई फ़ाइलों की सीमा तय करेगा। दूसरी सामग्री विन्यास फाइल को /Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
दोनों plist फ़ाइलों को रूट: व्हील के स्वामित्व में होना चाहिए और अनुमतियाँ -rw-r - r-- होनी चाहिए। यह अनुमतियाँ डिफ़ॉल्ट रूप से होनी चाहिए, लेकिन आप यह सुनिश्चित कर सकते हैं कि वे sudo chmod 644 चला रहे हैं। जबकि ऊपर बताए गए चरण सिस्टम-वाइड खुली फ़ाइल सीमाओं को पुनरारंभ करने के लिए सही तरीके से सेट करने का कारण बनेंगे, आप उन्हें मैन्युअल रूप से लॉंचल सीमा चलाकर लागू कर सकते हैं।
सिस्टम स्तर पर इन सीमाओं को सेट करने के अलावा, हम निम्नलिखित स्तरों को अपने bashrc, bashprofile, या analogous फ़ाइल में जोड़कर सत्र स्तर पर सेट करने की सलाह देते हैं:
ulimit -n 200000
ulimit -u 2048
प्लिस्ट फ़ाइलों की तरह, आपकी bashrc या इसी तरह की फ़ाइल में -rw-r - r-- अनुमतियां होनी चाहिए। इस बिंदु पर, आप अपने कंप्यूटर को पुनरारंभ कर सकते हैं और अपने टर्मिनल में ulimit -n दर्ज कर सकते हैं। यदि आपका सिस्टम सही तरीके से कॉन्फ़िगर किया गया है, तो आपको देखना चाहिए कि अधिकतम 20000 पर सेट किया गया है।
अधिक जानकारी के लिए आप इस लेख का अनुसरण कर सकते हैं।
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
मूल्यों को प्रभावी बनाने के लिए अपने मैक को पुनरारंभ करना याद रखें।