Ліміт відкритих файлів не працює як раніше в OSX Yosemite [дублікат]


22

Я щойно оновив Mac OS X на Yosemite, і тепер деякі програми не працюють (IBM DB2). Я знаю, що мені потрібно встановити Відкриті файли на 65000, однак команда не працює.

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument

Чому це відбувається і як я можу виправити проблему?

Відповіді:


25

Схоже, існує абсолютно інший метод зміни ліміту відкритих файлів для кожної версії OS X!

Для ОС X Sierra (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
    

7
Чекаємо нової відповіді для macOS 10.13! :)
NSTJ

1
Процес не працював для мене, поки я не перезапустив. Спасибі! це дійсно дуже допомогло
користувач2773086

Цей історія також говорить, що зміна цих файлів - це спосіб оновити цей ліміт відкритого файлу для Sierra gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Devin G Rhode

1
Перезапуск необхідний для роботи лімітів (навіть якщо на кроці №4 відображаються оновлені значення)
тридцять

21

Я бачу, що ви все це задавали.

Існує обмеження ядра, з яким ви маєте мати справу, kern.maxfiles, який є лімітом ядра, і його не можна перевищувати при встановленні ulimit.

Дивіться сторінку блога Krypted Максимальна кількість файлів в Mac OS X для опису про те , як маніпулювати kern.maxifiles з допомогою SYSCTL.

Я ще не завантажував Yosemite на свій Mac. У sysctl -w kern.maxfiles=65000роботах по Mavericks, яка має той же kern.maxfiles = 12288 межі за замовчуванням.

Я перевірив свою VM OS X 10.6.8, і вона мала ту саму межу, яка задає питання про те, як вона працювала раніше до вашої версії OS X.

Існує поділка слайдів ( DB2 для Mac OS X Встановлення та налаштування DB2 для Mac OS X ), де відображаються рекомендовані обмеження для використання DB2, див. Збільшення системних параметрів на сторінці 7.

Збільшити системні параметри

Відкрийте /etc/sysctl.conf (або створіть його, якщо його ще немає) та вставте наступні налаштування. Ці параметри збільшують деякі параметри для спільної пам'яті та обмежень користувачів, які потрібні DB2 для роботи на Mac.

Додайте до
/etc/sysctl.conf kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc
kern.maxfiles = 65536

Здається, ви втратили /etc/sysctl.confфайл під час оновлення.


Власне, я встановив DB2 давно, і він працював. Потім я оновився до Maverick минулого року, без жодних проблем. І сьогодні я перейшов до Йосеміті, і ця проблема з’являється. Я не можу запустити вже встановлену DB2.
AngocA

Інша справа, що мій sysctl.conf ідентичний файлу, який ви помістили у своїй посаді. Я створив перший раз, коли я встановив DB2 (рік тому), але я не торкнувся його для міграції.
AngocA

Проблемою були деякі пробіли у цьому файлі: ibm.com/developerworks/community/forums/html/…
AngocA

1
Трейлінг простору, хто б міг подумати. В Apple, як передбачається, є одні з найкращих програмістів у світі.
користувач187561

@ user187561 sysctl(8)походить від BSD.
Дрю Стівенс

12

У Mac OS 10.10, здається, що встановлення ulimit не може перевищувати встановленого ліміту запуску.

Тож спочатку слід запустити максимальний ліміт startctl limit у терміналі, щоб отримати поточний параметр:

launchctl limit maxfiles
maxfiles    256            unlimited 

Так що в моєму випадку м'який межа становить 256, жорсткий межа - необмежений. І тоді, якщо я хочу встановити м'який межа 512:

sudo launchctl limit maxfiles 512 unlimited

Детальне використання startctl для встановлення лімітів можна знайти тут: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html


Здається, що "startctl limit maxfiles 512 unlimited" встановив мої (м'які, жорсткі) межі (512,10240) на Yosemite 10.10.5 2015-09-30
Dave X

2
"maxctіx лімітів startctl необмежено необмежено; maxfiles limitct limit limitfiles" означає, що 10240 є найбільшою межею, яка може бути введена. Використання більшої кількості мовчки не вдається, залишаючи налаштування, як і раніше.
Дейв X
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.