Яка команда контролює обмеження відкритого файлу?


19

Який командно-конфігураційний файл контролює обмеження відкритого файлу в OS X? Чи є інша команда для OS X 10.5 / 10.6 / 10.7? Опції, які я вивчаю нижче ulimit, sysctl- іlaunchctl

"Занадто багато відкритих файлів", мабуть, поширена помилка в Leopard, можливо, в інших версіях OS X:

Існує багато (пов’язаних?) Способів перегляду відкритих обмежень файлів:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

У деяких з вищезазначених постів було заявлено, що їх можна змінити за допомогою наступних команд:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

Однак із вищезазначених команд тільки sysctlкоманди мають будь-який ефект (тобто ulimit -nі launchctl limitне показують змін після введення вищезазначених команд, в той час як sysctl -aпоказують запитувані зміни).

Відповідні місця для зміни цих параметрів для ОС:

/etc/sysctl.conf
/etc/launchd.conf

Я також виявив одну відповідь, яка читає, що ulimitкерує лише поточною оболонкою.

Як я можу налаштувати вгору максимум файлів / максимально відкритих файлів на macOS?

Відповіді:


9

Проста відповідь полягала в тому, що існувало кілька лімітів і найнижча межа, яку ви досягаєте в конкретному екземплярі, призведе до вашої помилки. Зараз 10.12 launchctl limit maxfilesтакож знаходиться в суміші. Для детальної інформації про реалізацію ця чудова відповідь стає виграшною і заслуговує більше голосів, ніж той, який я можу дати.

інші відповідні теми:

ulimitРівень встановлюється на низькому рівні , щоб запобігти один поганий сценарій оболонки від повені ядро з відкритими файлами.

kern.maxfilesperprocТам залишити трохи місця в макс файлів розраховувати так , що один процес може використовувати більшу частину , але не всі з відкритого простору обробника файлів з ядра.

Для нормальних ситуацій kern.maxfilesкінцевим обмежуючим фактором є.

У Sierra - ліміт - 256 відкритих файлів і необмежений макс. Тому я вважаю, що встановлення від 3 до 4 тис. Файлів, встановлених для м'якого ліміту, працює майже на всьому нашому апаратному забезпеченні, і все ще тримає систему в режимі реагування, коли відвертий процес відкриється занадто багато файли. Ми любимо тримати наші сервери розробок на межі 256, щоб ми вловили пропускне та проблемне програмне забезпечення при розробці / постановці та тестуванні, а не дізнавались про це у виробництві.

Я не прихильник 10-файлових файлів - можливо, із сховищами APFS та NVMe ми побачимо день, коли це немислимо, але спробуємо дотримуватися сотень чи малих тисяч для ваших лімітів файлів. Особливо, якщо ваш mac має низький ліміт процесів , мати стільки файлів, відкритих настільки мало процесів, може бути проблематично.


9

Схоже, існує абсолютно інший метод зміни ліміту відкритих файлів для кожної версії ОС 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

Здається, у мене виникли проблеми із встановленням максимілів таким чином, щоб другим значенням було встановлено значення "необмежене". Будь-які думки?
користувач200857

7

Далі слід вирішити найпоширеніші проблеми (і перераховані в порядку їх ієрархії):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Примітки:

  1. Вам потрібно буде перезапустити, щоб ці зміни набули чинності.
  2. AFAIK ви більше не можете встановлювати обмеження на "необмежений" в ОС X
  3. maxctfile startctl обмежені maxfilesми sysctl, і тому їх не можна перевищувати
  4. Схоже, sysctl успадковує kern.maxfilesperproc від maxfiles startctl
  5. ulimit, схоже, успадковує це значення "відкритих файлів" від запуск за замовчуванням
  6. ви можете встановити користувацьку polimit в / etc / profile або ~ / .profile; хоча це не потрібно, я наводив приклад
  7. Будьте обережні, встановлюючи будь-яке з цих значень на дуже високе число в порівнянні з їх замовчуванням - функції існують стабільність / безпека. Я взяв ці приклади, які, на мою думку, є розумними, написані на інших веб-сайтах.

0

Простими словами:

  • ulimitКоманда забезпечує «контроль над ресурсами , наявними в оболонці і процесів вона створює» (див help ulimitі man bash). Ресурси, надані оболонці, обмежені обмеженнями системних ресурсів.

  • launchctlКонтролює максимальне споживання системних ресурсів пов'язаних з поточною діяльністю (див: man setrlimitа man launchctl). Максимальні значення обмежені межами ядра.

  • В sysctlуправлінні ядром меж (див man sysctlі настройка обмеження ядра BSD в ).

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

Дивіться також: Яка залежність між `startctl limit` та` ulimit`?


Для проблеми із занадто великою кількістю відкритих файлів, це залежить від того, який саме м'який чи жорсткий ліміт був досягнутий (будь то локальний скрипт оболонки, глобальний скрипт, яким керує rootпрограма, програма чи всі процеси одночасно). Варто збільшити всі обмеження (обмеження оболонки, запуску та ядра).

Щоб постійно збільшувати ліміти, див.: Як наполегливо контролювати максимальне споживання системних ресурсів на Mac?

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