सवाल क्या ओएस एक्स 10.7.1 पर "सिस्टम में बहुत सारी खुली फाइलें" त्रुटि के लिए कोई फिक्स है?


मुझे ओएस एक्स 10.7.1 पर "सिस्टम में बहुत सारी खुली फाइलें" सीमा से छुटकारा पाने की ज़रूरत है।

क्या उधर रास्ता है?


156
2018-06-07 08:52


मूल


क्या आप ऐसा होने के बारे में और अधिक व्याख्या करना चाहते हैं? किस परिस्थितियों में? - slhck
@ एसएलएचके - मुझे एक ही समस्या है। परिस्थितियां मूल रूप से "यादृच्छिक रूप से होती हैं।" मैं एक डेवलपर हूं, इसलिए मैं अपने मैक का काफी उपयोग कर रहा हूं: एक या अधिक डेटाबेस चला रहा है, एक वेब सर्वर, परीक्षण उपकरण, एक या अधिक ब्राउज़र, और एक संगीत खिलाड़ी सभी एक साथ। Google क्रोम एक ऐसा प्रोग्राम प्रतीत होता है जिसमें बहुत सी फाइलें खुली हैं। - Nathan Long
असल में, मेरा "भारी उपयोग" मुद्दा नहीं था; कर्नल और प्रति-प्रक्रिया के लिए खुली फ़ाइलों की अधिकतम संख्या के लिए मेरी सेटिंग्स डिफ़ॉल्ट के मुकाबले बहुत कम थीं। - Nathan Long
यदि आपने नाथन की टिप्पणी पढ़ी और आश्चर्यचकित किया कि उसने डिफ़ॉल्ट के बारे में कोई विवरण क्यों शामिल नहीं किया है, तो ऐसा इसलिए है क्योंकि उसने इसे नीचे दिए गए जवाब में लिखा है। (अच्छा उत्तर! :) - Olie
मैं नाथन लांग के रूप में एक ही उपयोग परिस्थिति में हूं, और फिर से शुरू हुआ अपाचे एकमात्र कदम था जिसने समस्या को हल किया। मैंने नीचे दी गई सभी सीमाओं को लागू किया लेकिन उन्होंने तुरंत मदद नहीं की। मैं कमांड लाइन phpUnit परीक्षण> सेलेनियम सर्वर> फ़ायरफ़ॉक्स> अपाचे> php> mysql सभी एक ही मैकबुक पर चला रहा हूं। जब तक मैं मैवरिक्स में अपग्रेड नहीं करता तब तक ठीक काम करने के लिए प्रयुक्त होता है। मुझे मिली त्रुटि वेबपैप में परीक्षण की जा रही है, यानी यह php / apache फाइलों से बाहर चल रहा है, इसलिए संभावित रूप से शेल सेटिंग द्वारा नियंत्रित नहीं किया जाता है। - scipilot


जवाब:


इसके अनुसार यह सहायक लेख (जो मैं पढ़ने की सिफारिश करता हूं):

डिफ़ॉल्ट रूप से, मैक ओएस एक्स खोलने वाली फ़ाइलों की अधिकतम संख्या सेट की जाती है   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

नोट: ओएस एक्स 10.10 या उससे कम में, आप सेटिंग जोड़ सकते हैं /etc/launchd.conf पसंद limit maxfiles और जो भी आप यहां डालते हैं उसे ओवरराइड करेंगे।

फिर से, लेख से:

एक बार ऐसा करने के बाद, कर्नेल की अधिकतम संख्या होगी   फाइलें लेकिन खोल नहीं हो सकती है। और चूंकि अधिकांश प्रक्रियाएं लेती हैं   इस शेल द्वारा कई फाइलें शुरू की जा रही हैं   इसे बढ़ाना चाहते हैं।

इसके लिए आदेश है:

ulimit -S -n 2048 # or whatever number you choose

वह परिवर्तन भी अस्थायी है; यह केवल वर्तमान खोल सत्र के लिए रहता है। आप इसे अपनी खोल विन्यास फाइल में जोड़ सकते हैं (.bashrc, .zshrc या जो भी हो) यदि आप इसे खोलने के लिए हर बार दौड़ना चाहते हैं।


202
2018-06-29 20:23



लॉन्च एरिया में आइकन पर क्लिक करके लॉन्च की गई प्रक्रियाओं पर कौन सी सीमा लागू होती है? और उस सीमा को कैसे बदला जाए? जब आप "खोल" कहते हैं, तो मुझे लगता है कि आपका मतलब एक इंटरैक्टिव टर्मिनल खोल है। - Cheeso
@ चेसियो - मैं सोच कि समग्र सिस्टम सीमा (sysctl) या लॉन्च सीमा, जो भी कम हो, उस पर नियंत्रण रखती है। - Nathan Long
सामग्री सीमा अधिकतम 1000000 1000000 के साथ एक /etc/launchd.conf बनाना मेरे लिए बहुत अच्छा काम करता है! (ओएसएक्स 10.8.2 यहाँ) - Zugwalt
मैंने डाला kern.maxfiles=65000 kern.maxfilesperproc=65000 /etc/sysctl.conf में और रीबूट किया गया। kern.maxfiles को अनदेखा कर दिया गया था और डिफ़ॉल्ट पर रुक गया लेकिन kern.maxfilesperproc 65000 पर सेट किया गया था। मेरे पास कोई /etc/launchd.conf नहीं है, तो उसके साथ क्या चल रहा है? - pferrel
अगर किसी को अधिकतम फाइलों में चिपकने वाली समस्याएं नहीं हैं, तो ऐसा इसलिए है क्योंकि maxfiles लाइन के बाद एक पीछे की जगह है, जिसे हटाया जाना चाहिए। - jjathman


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

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

53
2018-01-24 14:56



पूरी तरह से काम किया, धन्यवाद! मेरे मामले में संदेश के साथ जावा प्रक्रिया में त्रुटि प्रकट हुई IO Error: Bad file descriptor (Write failed) - agradl
एल कैपिटन 10.11.6 पर भी काम करता है - Troy Daniels
अभी भी खोल के लिए ulimit नहीं बदल सकते हैं। अधिकतम 1024 जो कुछ भी करता है वह रहता है - DataGreed
चरण 2 रन पर: सुडो चमोद 600 / लाइब्रेरी / लांच डैमन्स /limit.maxfiles.plist सुडो चाउन रूट / लाइब्रेरी / लांच डैमन्स /limit.maxfiles.plist - Hai Nguyen


आपको अपनी उलिमिट सेटिंग्स को बढ़ाने की आवश्यकता होगी - यह इन दिनों ओएस एक्स पर बहुत कम है - डिफ़ॉल्ट रूप से 256। जोड़ना ulimit -n 4096 या आपके ~ / .profile या समकक्ष के समान और यह आपके स्थानीय वातावरण में इसे हल करेगा। रन ulimit -a अपने वर्तमान स्तर की जांच करने के लिए

सिस्टम सेटिंग्स को देखने के लिए, इसे चलाएं:

launchctl limit maxfiles

यह प्रति प्रक्रिया के आधार पर शेर (10240) में काफी अधिक सेट किया गया है। लेकिन यदि आप अभी भी इसे मार रहे हैं तो आप वांछित स्तर के साथ एक ही कमांड का उपयोग करके इसे उच्च सेट कर सकते हैं। परिवर्तन स्थायी /etc/launchd.conf है जहां आपको प्रासंगिक रेखाएं जोड़ने की आवश्यकता है।


29
2018-06-07 11:09



256? यह मेरे लिए 2560 फाइल डिस्क्रिप्टर है और मैंने इसे कभी नहीं बदला है। सीमा 266 प्रक्रियाएं है (सीएफ। ulimit -a)। - slhck
मेरे लिए वही, मैकोज़ एक्स मावेरिक पर 256 फाइलें - Climbatize
ओएस एक्स योसामेट पर भी 256 - Alexander
एल कैपिटन पर 256 भी। - TMN
योसैमेट में 256। - Jaec


अन्य विकल्प अपराधी को ढूंढ सकता है:

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

19
2018-02-18 00:42



सहायक! लेकिन ओएस एक्स (10.11) पर क्रमबद्ध नहीं है -एच। (शायद -g?) - Robert Calhoun
मेरे लिए बिना ठीक काम किया -h (ओएस एक्स 10.12.3): sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail - vearutop
तो बिना इसके हो -h - sanmai
यह एकमात्र उत्तर है जिसने मुझे मेरी समस्या का कारण बनने में मदद की .. धन्यवाद :) - SgtPooki
इसके लायक होने के लिए, आप प्रक्रिया आईडी की एक सूची भी प्राप्त कर सकते हैं जिसमें सबसे खुली फाइलें हैं lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail। - Chris Frederick


दोस्तों, मैवरिक्स पर 10.9.4

ulimit -n 2048 ठीक काम करता है। आपको एक नया लॉगिन सत्र लॉन्च करने की आवश्यकता हो सकती है।


9
2017-09-04 16:19





तुम दौड़ सकते हो

lsof -n

जो प्रक्रिया बहुत अधिक फाइलें खोलती है।

फिर इसे मार डालो।

या

sysctl -w kern.maxfiles=20480

इसे बड़े में बदलें।


1
2018-05-18 02:52



कृपया बताएं कि यह उत्तर पहले से दिए गए लोगों से अलग कैसे है। - Stephen Rauch


मुझे chmod -R करते समय इसका सामना करना पड़ा, इसलिए मुझे इसे छोटे कदमों से लेकर मिल गया, उदाहरण के लिए

# for each directory
find . -type d -exec chmod 755 {} \;

0
2017-12-14 18:50



हालांकि यह एक काम-आसपास हो सकता है, यह वास्तव में सवाल का जवाब नहीं देता है। शायद यह समझाते हुए कि आप संदेश से छुटकारा नहीं पा सकते हैं और फिर इसे किसी भी मुद्दे से कम करने के लिए इसे एक तरीके के रूप में पेश करने से आपका जवाब बेहतर होगा। - music2myear