nofile
Ограничение по умолчанию для учетных записей пользователей OS X в наши дни составляет около 256 файловых дескрипторов. Я пытаюсь протестировать какое-то программное обеспечение, которое требует гораздо больше соединений, чем открытое одновременно.
На типичной коробке Debian, на которой запущен модуль ограничений pam, я бы отредактировал, /etc/security/limits.conf
чтобы установить более высокие ограничения для пользователя, который будет запускать программное обеспечение, но я не уверен, где установить эти ограничения в OS X.
Есть ли где-нибудь графический интерфейс для этого? Где-нибудь есть файл конфигурации? Какой самый простой способ изменить ограничения по умолчанию на OS X?
Ответы:
Под леопардом начальный процесс
launchd
. Улиты по умолчанию каждого процесса наследуются отlaunchd
. Для справки: ограничения по умолчанию (собранные в)Чтобы изменить любое из этих ограничений, добавьте строку (сначала вам может понадобиться создать файл)
/etc/launchd.conf
, аргументы такие же, как переданные вlaunchctl
команду. НапримерТем
launchd
не менее , уже запущена ваша оболочка входа в систему, поэтому самый простой способ, чтобы эти изменения вступили в силу, это перезагрузить наш компьютер. (Используйте >> для добавления в /etc/launchd.conf.)источник
sysctl.maxfiles
? (связанный вопрос: apple.stackexchange.com/questions/33715/too-many-open-files )echo
под sudo, но пытаетесь сделать так, чтобы ваша непривилегированная оболочка добавлялась в файл, на что у него нет разрешения. Попробуйecho "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.conf
вместо этого.не работает, потому что sudo находится не в том месте, попробуйте это:
источник
Ограничения оболочки
Ресурсы , доступные оболочки и процессы могут быть изменены с помощью
ulimit
команды , которые могут быть добавлены в сценарий запуска , такие как~/.bashrc
или~/.bash_profile
для отдельных пользователей или/etc/bashrc
для всех пользователей . Пример строки для добавления:Смотрите:
help ulimit
иman bash
для получения дополнительной информации.Системные ограничения
В общем, системные ограничения контролируются платформой Launchd и могут быть изменены
launchctl
командой, напримерЧтобы сделать изменения постоянными, вам нужно создать файл списка свойств в определенных папках, совместимых с Launch, который действует как агент запуска.
Вот пример команды, создающей такой файл запуска:
Файл будет загружен при запуске системы, однако для загрузки вручную:
Для того, чтобы проверить текущие ограничения, выполните команду:
launchctl limit
.См .: Создание демонов запуска и агентов .
Пределы ядра
sysctl
командой.sysctl -a | grep ^kern.max
.sudo sysctl -w kern.maxfiles=20480
.Связанный:
Устаревшие методы
В более ранней версии macOS вы могли устанавливать эти ограничения в
/etc/sysctl.conf
масштабе всей системы, как это обычно делается в Unix, однако, похоже, это не поддерживается.Использование
~/.launchd.conf
или, по-/etc/launchd.conf
видимому, также не поддерживается ни в одной из существующих версий macOS. викиТо же самое с
/etc/rc.local
файлом запуска, он не поддерживается в macOS.источник
Теперь я должен выяснить, почему существует 2 способа проверки / установки пределов ....
Ладно - похоже
ulimit
иsysctl
дает ложно-позитивное ощущение, что они действительно что-то делают - но вместо этого они кажутся бесполезными . Может ли кто-нибудь это проверить?Хорошо, я начинаю понимать. Начиная с v10.4,
init
процесс больше не выполняется, его заменилиlaunchd
, который также работает с PID 1.И, конечно, стоит упомянуть, что
ulimit
это встроеннаяlaunchctl
оболочка, независимая от оболочки программа.источник
В OS X, если вы пытаетесь изменить мягкие ограничения для демона, процесса или задачи, правильным способом изменить эти мягкие ограничения является не изменение конфигурации запуска по умолчанию для всех процессов, а установка этого значения для процесса, которым вы являетесь пытаясь бежать.
Это выполняется в вашем файле launchd .plist для вашего процесса.
Если у вас запущен демон или процесс, для которого вам нужно иметь больше открытых файлов, создайте для него файл plist и добавьте в него следующие параметры:
Пример использования mongodb. Я создаю файл .plist с именем org.mongo.mongodb.plist и сохраняю его в /Library/LaunchDaemons/org.mongo.mongodb.plist. Файл выглядит так:
Теперь у вашего процесса есть ресурсы, в которых он нуждается, без использования глобальной конфигурации системы. Это будет автоматически установлено при перезапуске. Или, если вы не хотите перезапустить, вы можете запустить
Если ваш процесс или задача скорее агент, чем демон, вы можете вместо этого поместить .plist в / Library / LaunchAgents. Различные правила применяются для того, как launchd будет контролировать ваш процесс в любом случае. LaunchDaemons, похоже, зарезервирован для процессов, которые launchd будет пытаться поддерживать в любое время.
источник
Следующее должно решить большинство решений (и перечислены в порядке их иерархии):
Заметки:
источник
Мой опыт показывает, что моя задача с большим количеством процессов была успешной только с:
Первые два могут войти в
/etc/sysctl.conf
и значение ulimit в launchd.conf для надежной настройки.Так как tcp / ip был частью того, что я делал, мне также нужно было увеличить
по умолчанию 128.
До того, как я увеличил лимиты процесса, у меня возникали «ложные» сбои, не хватало ресурсов. До того, как я увеличил kern.ipc.somaxconn, я получал ошибки "сломанной трубы".
Это было во время выполнения достаточного количества (500-4000) отдельных процессов на моем монстром Mac, ОС 10.5.7, затем 10.5.8, теперь 10.6.1. Под Linux на компьютере моего босса это просто работало.
Я думал, что число процессов будет ближе к 1000, но кажется, что каждый запущенный мной процесс включал свою собственную копию оболочки в дополнение к фактическому элементу, выполняющему реальную работу. Очень празднично
Я написал игрушку для показа, которая пошла примерно так:
и наблюдал максимальное количество процессов в ps -ef и зависание в netstat в ожидании
TIME_WAIT
истечения срока действия ... С увеличенными пределами я увиделTIME_WAIT
на пике 3500+ элементов.До того, как я поднял лимиты, я мог «подкрасться» к порогу отказа, который начинался ниже 1 КБ, но вырос до высокого значения 1190… каждый раз, когда он выдавался до отказа, в следующий раз это могло занять немного больше, вероятно из-за чего-то кэшируется, что расширяется до своего предела каждый раз, когда это не удалось.
Несмотря на то, что мой тестовый пример имел «ожидание» в качестве последнего утверждения, все еще было МНОЖЕСТВО отсоединенных процессов, зависших после его выхода.
Я получил большую часть информации, которую я использовал из сообщений в Интернете, но не все это было точно. Ваш пробег может варьироваться.
источник