Предел запуска максимальных файлов против sysctl kern.maxfilesperproc

280
DenisL

Я пытаюсь понять поведение MacOS High Sierra. Вот вывод на моей машине:

launchctl limit maxfiles
maxfiles 256 неограниченно

sysctl kern.maxfiles
kern.maxfiles: 12228

sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240

Мои вопросы:

  1. Является ли maxfiles 256 из launchctl limit maxfiles лимитом для каждого процесса?
  2. Почему maxfiles по "launchctl limit maxfiles" отличается от kern.maxfiles и kern.maxfilesperproc ?
  3. Какой лимит ( maxfiles 256 или kern.maxfilesperproc: 10240 ) применяется для приложения, которое пользователь запускает вручную из Приложения?
2

1 ответ на вопрос

0
Spiff
  1. Есть maxfiles 256от launchctl limit maxfilesпредела в процессе?

Да. launchctl limit maxfilesпечатает мягкие и жесткие ограничения для каждого процесса getrlimit(2), о которых сообщает справочная страница:

 Лимит ресурса указывается как мягкий и жесткий лимит. Когда мягкий предел превышен, процесс может получить сигнал (например, если превышено время процессора или размер файла), но будет разрешено выполнение до тех пор, пока оно не достигнет жесткого предела (или не изменит свой ресурс предел). 

getrlimit(2)очевидно, где встроенная команда оболочки ulimitполучает информацию.

  1. Почему launchctl limit maxfilesотличается от kern.maxfilesа kern.maxfilesperproc?

launchctl limit maxfilesсообщает о мягких и жестких ограничениях на процессы, которые запускает наложение на процессы. launchd, по-видимому, накладывает мягкий предел в 256 и «неограниченный» жесткий предел, что на самом деле означает, что он ограничен только kern.maxfilesperprocядром, а не launchd.

kern.maxfilesограничение на общее количество файловых дескрипторов во всей системе; общая сумма всех открытых файлов для всех процессов плюс все файлы, которые ядро ​​открыло для своих собственных целей.

  1. Какой лимит ( maxfiles 256или kern.maxfilesperproc: 10240) применяется для приложения, которое запускается пользователем вручную из Приложения?

Приложение, запускаемое вручную пользователем, запускающим приложение из графического интерфейса, унаследует мягкое ограничение на запуск, равное 256, и «неограниченное» жесткое ограничение, поэтому его жесткое ограничение будет эффективно при kern.maxfilesperprocусловии, что в системе достаточно дескрипторов файлов, что приложение может достичь своего предела, прежде чем вся система попадет kern.maxfiles.

Процессы (приложения) также могут использовать системные вызовы для настройки своих мягких ограничений, когда они запущены. Таким образом, мягкое ограничение 256 является просто значением по умолчанию во время запуска, и ваше приложение / процесс может немедленно увеличить свой собственный мягкий предел.