سؤال هل هناك حل لخطأ "الكثير من الملفات المفتوحة في النظام" على OS X 10.7.1؟


ولست بحاجة للتخلص من غذر "الكثير من الملفات المفتوحة في النظام" الحد على OS X 10.7.1.

هل هناك طريقة؟


156
2018-06-07 08:52


الأصل


هل تريد توضيح المزيد حول متى يحدث هذا؟ في أي ظروف؟ - slhck
slhck - لدي نفس المشكلة. الظروف هي في الأساس "عشوائيا". أنا مطور ، لذلك فأنا أستخدم جهاز Mac بشكل كبير إلى حد ما: تشغيل واحد أو أكثر من قواعد البيانات ، وخادم الويب ، وأدوات الاختبار ، ومتصفح واحد أو أكثر ، ومشغل موسيقى في آن واحد. يبدو أن Google Chrome هو برنامج واحد يحتوي على الكثير من الملفات المفتوحة. - Nathan Long
في الواقع ، لم يكن "الاستخدام الكثيف" لي المشكلة. كانت إعداداتي للحد الأقصى لعدد الملفات المفتوحة للنواة وكل عملية أقل بكثير مما يجب أن تكون عليه الإعدادات الافتراضية. - Nathan Long
إذا كنت تقرأ تعليق ناثان وتساءلت عن سبب عدم تضمينه أي تفاصيل حول التخلف عن الدفع ، فذلك لأنه قام بكتابة كل ذلك في إجابته أدناه. (إجابة لطيفة! :) - Olie
أنا في نفس ظروف الاستخدام مثل ناثان لونج ، ووجدت أن إعادة تشغيل Apache كانت الخطوة الوحيدة التي "تحل" المشكلة. تقدمت بطلب جميع الزيادات في الحد الأدنى ولكن لم تساعد على الفور. أنا أدير اختبارات سطر الأوامر phpUnit> خادم selenium> firefox> apache> php> mysql all on the macbook نفسه. تستخدم للعمل بشكل جيد حتى أقوم بالترقية إلى mavericks. الخطأ الذي أحصل عليه هو في webapp قيد الاختبار ، بمعنى أنه يتم تشغيل php / apache من الملفات ، لذا لا يمكن التحكم في إعداد shell. - scipilot


الأجوبة:


بالنسبة الى هذه المادة مفيدة (التي أوصي بقراءتها):

بشكل افتراضي ، يتم تعيين الحد الأقصى لعدد الملفات التي يمكن فتح Mac OS X   إلى 12،288 والعدد الأقصى للملفات التي يمكن أن تفتحها عملية معينة   10240.

يمكنك التحقق من ذلك بـ:

  • 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 وستتجاوز أي شيء تضعه هنا.

مرة أخرى ، من المقال:

بمجرد الانتهاء من ذلك ، فإن النواة نفسها سيكون لها الحد الأقصى من   الملفات ولكن قد لا قذيفة. وبما أن معظم العمليات التي سوف تتخذ   سيتم البدء في هذه الملفات العديدة بواسطة shell أنت   اريد زيادة ذلك.

الأمر لذلك هو:

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

هذا التغيير هو أيضا مؤقت. تستمر فقط لجلسة shell الحالية. يمكنك إضافته إلى ملف تهيئة shell الخاص بك (.bashrc، .zshrc أو أيًا كان) إذا كنت تريد تشغيله في كل مرة تفتح فيها صدفة.


202
2018-06-29 20:23



ما هو الحد الذي ينطبق على العمليات التي يتم تشغيلها من خلال النقر على الرموز في منطقة الإطلاق؟ وكيفية تغيير هذا الحد؟ عندما تقول "shell" ، أفترض أنك تعني shell طرفية تفاعلي. - Cheeso
Cheeso - أنا يفكر أن الحد الكلي للنظام (sysctl) أو حد launchd ، أيهما أقل ، يتحكم في ذلك. - Nathan Long
إنشاء /etc/launchd.conf مع الحد الأقصى من محتويات maxfiles 1000000 1000000 عملت كبيرة بالنسبة لي! (OSX 10.8.2 هنا) - Zugwalt
وضعت kern.maxfiles=65000 kern.maxfilesperproc=65000 في /etc/sysctl.conf وإعادة التمهيد. تم تجاهل kern.maxfiles وبقي الافتراضي ولكن تم تعيين kern.maxfilesperproc إلى 65000. ليس لدي أي /etc/launchd.conf فما الأمر مع ذلك؟ - pferrel
إذا كان لدى أي شخص مشاكل مع الملفات القصوى غير ملتصقة ، فذلك لأن هناك مسافة زائدة بعد سطر maxfiles ، التي يجب حذفها. - jjathman


يبدو أن هناك طريقة مختلفة تمامًا لتغيير حد الملفات المفتوحة لكل إصدار من OS X!

لنظام التشغيل OS X سييرا (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

53
2018-01-24 14:56



عملت على أكمل وجه ، شكرا! في حالتي يتجلى الخطأ في عملية جافا مع الرسالة IO Error: Bad file descriptor (Write failed) - agradl
يعمل أيضا على إل كابيتان 10.11.6 - Troy Daniels
لا يزال لا يمكن تغيير ulimit لقذيفة. يبقى الحد الأقصى 1024 ما أقوم به - DataGreed
في الخطوة 2 المدى: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist - Hai Nguyen


ستحتاج إلى زيادة إعدادات ulimit - فهي منخفضة جدًا على OS X في هذه الأيام - 256 افتراضيًا. إضافة ulimit -n 4096 أو مشابهة لـ ~ / .profile أو ما يعادلها والتي ستحلها في البيئة المحلية الخاصة بك. يركض ulimit -a للتحقق من مستوياتك الحالية

لرؤية إعدادات النظام ، قم بتشغيل هذا:

launchctl limit maxfiles

تم ضبطه على مستوى أعلى قليلاً في الأسد (10240) على أساس كل عملية من المعتاد. ولكن إذا كنت لا تزال تصل إلى هناك ، فيمكنك إعداده أعلى باستخدام نفس الأمر مع المستويات المطلوبة. لجعل التغييرات دائمة /etc/launchd.conf حيث تحتاج إلى إضافة الخطوط ذات الصلة.


29
2018-06-07 11:09



256؟ انها 2560 واصف ملف بالنسبة لي ولم يسبق لي تغييره. الحد الأقصى هو 266 عملية (c.f. ulimit -a). - slhck
نفس الشيء بالنسبة لي ، 256 ملفًا على MacOS X Maverick - Climbatize
256 على OS X يوسمايت كذلك - 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



معاون، مساعد، مفيد، فاعل خير! ولكن الفرز على OS X (10.11) لا يأخذ -h. (ربما -g؟) - Robert Calhoun
بالنسبة لي عملت بشكل جيد فقط دون -h (OS X 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