OS X Yosemite - відкрито занадто багато файлів


18

Нещодавно я перейшов від Маверікс до Йосеміті

Я впевнений , що моя проблема лежить ж / кількість файлів , я можу відкрити - але я не знаю , як її вирішити . Я також впевнений, що я прочитав кожну статтю / підказку щодо створення /etc/sysctl.confфайлу та /etc/launchd.confфайлу

Для наочності це те, що вони обидва зараз виглядають як nb (я навіть не впевнений, чи це правильні команди, які потрібно вводити в них більше - я намагався майже про все та кожну комбінацію. Тобто: більш високі значення, нижчі значення , видалення команд, додавання команд)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

Я також спробував збільшити свої безлімітні значення - як глобально, так і локально для мого поточного сеансу ... не буено

уліміть -а

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096

Гаразд - саме тут спочатку почався мій головний біль ... Мій БД (percona-сервер 5.6.21-69.0, встановлений через homebrew) почав задихатися і вмирати, а в mysql-error.log він заповнився w / помилкою too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

Саме тут я спочатку почав намагатися вирішити цю проблему, "піднявши" мою прошивку, maxfiles, maxproc тощо.

Зрештою - розчарований, я продовжив свою діяльність і повернусь до цього питання пізніше. Тоді я намагався sudo gem install nokogiri знову і знову провалюватися і виплювати цю саму помилку (багато повторень про те, що builder.rb не змогла створити нативне розширення дорогоцінного каменю - супроводжувалася купою повторних стек-трас Logs Gist

Помилки встановлення nokogiri помилки встановлення nokogiri

Я спробував / погуглив купу різних підходів до вирішення цієї проблеми (тобто: додаткові прапори тощо). Що дивовижне - і коли я почав думати, що ця проблема була прив’язана до # відкритих файлів / процесів, це коли я перевірив, topпоки дорогоцінний камінь встановлював .... Я був дуже здивований, побачивши, що знайшов

верх під час gem install nokogiri sudo gem встановити nokogiri

Схоже, мій процес продовжує розгортатись, що потім мало сенс для цього ОДНОГО рядка в попередньому малюнку (див. "Зображення помилок встановлення nokogiri")

sh: fork: Resource temporarily unavailable

Тож я щось не маю ідеї, але я не дуже впевнений, як налагодити # файли більше?

ОНОВЛЕННЯ

Ну, мені вдалося встановити nokogiri. На жаль, я не зовсім впевнений, що це виправило, бо я спробував так багато речей. Але я думаю, що довелося мати справу з перевстановленням рубіну. Однак я все ще отримую ту саму проблему з моєю БД, яка скаржиться на занадто багато файлів, відкритих, коли я використовую будь-яку базу даних, яка не є тривіально малою.


Гм. Напевно, не слід так сильно нереститися? Можливо, варто також підняти помилку з дияволами цього самоцвіту.
slhck

Відповіді:


16

Модифікація /etc/launchd.confна багато запитів google та пропозицій SO, схоже, не працювала для мене в Yosemite (10.10). Після численних комбінацій змін / перезавантаження / тестування в результаті роботи було модифіковано (або створено /etc/sysctl.confфайл, якщо його не існує) .

Це те, що мені довелося вкласти, щоб воно працювало

kern.maxfiles=65536
kern.maxfilesperproc=65536

Я не впевнений, чи kern.maxfilesпотрібно там бути, але коли я мав це там сам по собі, у мене все-таки виникло те саме питання, коли я додав, що kern.maxfilesperprocвсе почало працювати.


Я виявив, що для зміни цих змінних потрібен перезапуск (як очікувалося). Ви можете підтвердити, що значення змінилися, виконавши sysctl -a | grep kern.maxfiles.
Блейк Фредерік

8

Щоб налаштувати обмеження відкритих файлів на загальносистемній основі в Mac OS X Yosemite, потрібно створити два файли конфігурації. Перший - це список списку властивостей (aka plist), /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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Це встановить ліміт відкритих файлів 65536. Другий файл конфігурації плістів повинен зберігатися у /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>

Обидва файли плістів повинні бути власниками root:wheelта мати дозволи -rw-r--r--. Ці дозволи повинні мати місце за замовчуванням, але ви можете переконатися, що вони є на місці, запустивши sudo chmod 644 <filename>. Незважаючи на те, що описані вище кроки призведуть до правильного встановлення обмежень для відкритих файлів у системі під час перезавантаження, ви можете застосувати їх вручну, запустивши launchctl limit.

На додаток до установки цих меж на рівні системи, ми рекомендуємо встановити на рівні сеансу , а також шляхом додавання в наступні рядки bashrc, bashprofileабо аналогічного файлу:

ulimit -n 65536
ulimit -u 2048

Як і файли plist, і ваш bashrc або подібний файл повинен мати -rw-r--r--дозволи. У цей момент ви можете перезапустити комп’ютер і ввести ulimit -n у свій термінал. Якщо ваша система налаштована правильно, ви повинні побачити, що для maxfiles встановлено 65536.

Джерело: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/


1
"startctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" повідомляє, що максимум 10240 в моєму Yosemite 10.10.5 2015-09-30, а експеримент навколо них, схоже, показує, що якщо ви будете використовувати більше чітке число, це буде ігнорується.
Дейв X

5

Здійснення за замовчуванням у Yosemite становить 12 К та 10 К:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Тільки установка kern.maxfilesв , /etc/sysctl.confздається, вирішив мої проблеми. /etc/sysctl.confфайл:

kern.maxfiles=24576

точно такі ж значення для Сьєрра
Девін Г Род

Однак launchctl limit maxfilesдав мені це:maxfiles 256 unlimited
Девін Г Род
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.