Як наполегливо контролювати максимальне споживання системних ресурсів на Mac?


85

Перед Mavericks я міг використовувати /etc/launchd.confфайл, щоб змінити максимальне споживання системних ресурсів, наприклад:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

У Mavericks це більше не працює.

Який правильний спосіб зробити це в останній версії OS X?


Ваші обмеження перевищують максимум для OS X. maxfiles перевищує 10240, а maxproc - 1064. Якщо схвалена відповідь встановила межі, я б дав їй великі пальці вгору .. але він сидить там неправильно і не коригується протягом хорошого року + зараз ..
Joey T

@atmosx: Це має бути /etc/sysctl.conf, ні /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji-

1
@JoeyT: Насправді ви можете встановити його на більш високу межу! Але вам доведеться придбати "OS X Server" у "App Store", якщо ви користуєтеся Mac OS X 10.8 (Mountain Lion) або 10.9 (Mavericks). (Так, вам доведеться заплатити $ 19,99, щоб змінити налаштування!) Коротше кажучи, вам доведеться запустити sudo serverinfo --setperfmode trueодин раз, щоб перевести машину в "Режим роботи сервера". Тоді у вас є "вищий максимум", залежно від конфігурації машини. Будь ласка, дивіться мою публікацію на дискусії.apple.com/thread/5166397 для детальної інформації. Для 10.10 (Yosemite) режим увімкнено за замовчуванням (принаймні на моїй машині!). Дивіться мою відповідь нижче.
Siu Ching Pong -Asuka Kenji-

Відповіді:


87

Обмеження сеансу оболонки

Обмеження, встановлені через, ulimitвпливають лише на процеси, створені поточним сеансом оболонки.

  • "М'яка межа" - це фактична межа, яка використовується. Його можна встановити, наскільки це не більше "жорсткої межі".
  • "Жорстка межа" також може бути встановлена, але лише до значення, меншого від поточного, і лише до значення, не меншого за "м'який межа".
  • "Жорсткий ліміт", а також загальносистемні обмеження можуть бути підвищені root(адміністратором) шляхом виконання команд конфігурації системи або зміни файлів конфігурації системи.

Після припинення сеансу оболонки (на Ctrl+ D, exitабо закриття Terminal.appвікна тощо) налаштування не зникають. Якщо ви хочете те ж саме налаштування в наступному сеансі оболонки, додайте його до сценарію запуску оболонки.

ПРИМІТКА. Якщо ви користуєтесь bash, то це має бути ~/.bash_proileабо ~/.bash_login. Якщо ви використовуєте інші оболонки, мабуть, так і має бути ~/.profile.

Обмеження системи (вимагає перезавантаження, щоб набути чинності)

Для 10,9 (Mavericks), 10,10 (Yosemite), 10,11 (El Capitan) та 10,12 (Сьєрра):

Ви повинні створити файл за адресою /Library/LaunchDaemons/limit.maxfiles.plist(власник:, root:wheelрежим:) 0644:

<?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>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Ви повинні змінити цифри відповідно до своїх потреб. Вони є "м'якою межею" ( 262144) і "жорсткою межею" ( 524288) відповідно. Для отримання додаткових відомостей зверніться до сторінки керівництва, запустивши man launchd.plist.

Для 10,8 (гірський лев):

Ви можете додати такі рядки до /etc/sysctl.conf(власник:, root:wheelрежим:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

Ви повинні змінити цифри відповідно до своїх потреб. Вони є "загальносистемним лімітом" ( kern.maxfiles) та "лімітом на кожен процес" ( kern.maxfilesperproc) відповідно. Для отримання додаткових налаштувань зверніться до сторінки керівництва, запустивши man sysctlчи прочитайте вихідний код за адресою /usr/include/sys/sysctl.h.

Для старих Mac OS X (я думаю, він працює на 10.7 (Lion) або раніше):

Ви можете додати такий рядок до /etc/launchd.conf(власник:, root:wheelрежим:) 0644:

limit maxfiles 262144 524288

Ви повинні змінити цифри відповідно до своїх потреб. Вони є "м'якою межею" ( 262144) і "жорсткою межею" ( 524288) відповідно.

Якщо система не дозволяє встановити обмеження вище певного значення ...

Система не дозволяє встановити значення, що перевищує "жорсткий максимум" (запропонований Apple). Щоб збільшити цей "жорсткий максимум", вам потрібно придбати "OS X Server" у "App Store", після чого вам потрібно виконати таку команду один раз:

sudo serverinfo --setperfmode true

Це активує "режим роботи сервера" на вашій машині. Потім ви можете встановити максимум відповідно до конфігурації вашої машини (див. Це) . Я спробував це раніше (на Mountain and Mavericks), і це працює! Будь ласка, дивіться мою публікацію ( тут ) для отримання додаткової інформації.

Список літератури


1
Дякую; Я використовую Yosemite, і для мене працювала техніка LaistDaemon plist. Я вважаю, що це єдине, що робить. Для всіх, кому це потрібно, зауважте, що для його вступу в силу потрібна перезавантаження .
нк.

1
@nc. : До моєї відповіді додано "Вимагати перезавантаження, щоб набути чинності". Я надто довго працював у цій галузі, тому не знав, що деякі люди цього не знають. Дякуємо за нагадування!
Siu Ching Pong -Asuka Kenji-

2
Я використовую 10.9.5, але лише /etc/launchd.confпідхід показує будь-який ефект при запуску ulimit -n. Чи може хтось оновити інструкції, якщо це важливо?
Шрідхар Сарнобат

1
Метод 10.10 Йосеміті працює також у 10.11 El Capitan. Хоча я не міг встановити його на "необмежений", тому мені довелося просто використовувати дійсно високу кількість
antriver

1
@aolszowka: Дивіться це, як збільшити цю межу через /etc/sysctl.conf: superuser.com/questions/827984/…
Роб Йохансен

11

Здається, що створити файл /etc/launchd.confі поставити свою команду всередині нього слід зробити свою справу.


Якщо це не працює, ви, ймовірно, можете відредагувати або створити /etc/rc.localфайл і додати свою команду всередину нього, оскільки є невеликий шанс, що Apple коли-небудь видалить підтримку для обмеження в командному рядку.


Редагувати 1 :
Я повинен почати з цього, довідкова launchd сторінка посилається на наступні файли:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

Моя справа в тому, що тепер вам потрібно поставити свою команду або в, ~/Library/LaunchAgentsабо в /Library/LaunchDaemons.
Спробуйте спробувати і те, і інше.

Редагування 2 :
Будьте також відомі, що для запуску потрібен XML-файл, а не лише сценарії. гуй вирішив допомогти у вирішенні такого невільного - Лінгона . Можливо, існують інші безкоштовні продукти.


так як в моєму пості є багато інформації, чи можете ви сказати, яка була хороша?
Ківі

дивіться мою відповідь нижче.
Говард

І те /etc/launchd.confі /etc/rc.localінше ігнорується в 10.10 і пізніше, оскільки в 10.10 запуск був перероблений і SystemStarter був видалений.
нісетама

@nise не соромтеся оновлювати свій ансамбль, якщо щось нове з’явилося в останній версії Mac OS
Kiwy

10

Я щойно додав ці два рядки у свої .bash_profile
твори як шарм

ulimit -n 1024
ulimit -u 1024

2
Не впливає на обмеження системи.
not2savvy

1
Однак це може бути добре, якщо ваші обмеження в системі досить високі. Щоб перевірити, що вони є, ви можете просто запустити ulimit -n -H. У macOS High Sierra це unlimitedзмінило "м'який" ліміт користувача .bash_profileу трюку.
Джошуа Пінтер

9

Системні обмеження

Зміна обмежень /etc/launchd.confабо /etc/rc.localбільше не підтримується для останніх macOS. Див .: Старі системи та технології .

Натомість слід створити новий запуск агента .

Ось приклад PlistBuddyкоманди за допомогою команди (див. man PlistBuddy:):

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

І подібні за maxprocлімітом:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

Для завантаження файлів вище, запустіть: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Примітки:

  • Щоб надрукувати файл, запустіть: catабо PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Щоб перевірити журнал на наявність помилок під час завантаження, виконайте команду: tail -f /var/log/system.log.
  • Щоб побачити поточні launchdобмеження, виконайте команду: launchctl limit.
  • .plistФайл може бути поміщений в кожному користувач або папку агента загальносистемного ( LaunchAgents). Див: man launchdі man launchd.plist, або це або що відповідь для більш докладної інформації.

Обмеження ядра

Зверніть увагу, що вище лімітів системи Launchd ядро все ще обмежене, тому ви не можете встановити їх вище фактичних обмежень, встановлених змінними стану ядра (див. man sysctlДовідку).

Щоб побачити поточні обмеження ядра, виконайте команду: sysctl -a | grep ^kern.max.

Для збільшення maxfilesліміту, виконайте команду: sudo sysctl -w kern.maxfiles=20480.

Щоб змусити їх зберігатися, використовуйте аналогічний метод для створення .plistфайлів запуску , наприклад

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

Обмеження оболонок

Для обмежень оболонки додайте відповідну ulimitкоманду у ~/.bashrcабо ~/.bash_profileфайл запуску для окремого користувача чи /etc/bashrcдля всіх користувачів. Дивіться: Як додати збережені параметри ulimit для оболонки на Mac?

Пропоновані рядки для додавання:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
Будьте особливо обережні, maxprocтому що за замовчуванням обмеження жорсткого ядра для цього параметра становить 1064, тобто його встановлення на 2000 або "необмежене" насправді встановлює лише 1064. На жаль, ядро ​​цього не виконує maxprocperuid < maxproc, і налаштування, які ви пропонуєте, залишать система з maxprocperuid=2000і maxproc=1064яка небезпечна. Детальніше про це читайте тут .
Старий Про
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.