Вы хотите объяснить больше о том, когда это произойдет? При каких обстоятельствах?
Slhck
1
@slhck - у меня та же проблема. Обстоятельства в основном "наугад". Я разработчик, поэтому я довольно интенсивно использую свой Mac: запускаю одну или несколько баз данных, веб-сервер, инструменты тестирования, один или несколько браузеров и музыкальный проигрыватель одновременно. Похоже, Google Chrome - это одна из программ, в которой открыто много файлов.
Натан Лонг
На самом деле, мое «интенсивное использование» не было проблемой; мои настройки для максимального количества открытых файлов для ядра и каждого процесса были намного ниже, чем должны быть значения по умолчанию.
Натан Лонг
2
Если вы прочитали комментарий Натана и поинтересовались, почему он не включил никаких подробностей о значениях по умолчанию, это потому, что он изложил все это в своем ответе ниже. (Хороший ответ! :)
Оли
Я нахожусь в той же ситуации, что и Натан Лонг, и обнаружил, что перезапуск Apache был единственным шагом, который «решил» проблему. Я применил все приведенные ниже ограничения, но они не помогли сразу. Я запускаю тесты phpUnit командной строки> сервер селен> firefox> apache> php> mysql все на одном MacBook. Раньше работал нормально, пока я не перешел на Маверикс. Я получаю ошибку в тестируемом веб-приложении, то есть в php / apache заканчиваются файлы, поэтому, вероятно, не контролируется настройками оболочки.
По умолчанию максимальное количество файлов, которые может открыть Mac OS X, составляет 12 288, а максимальное количество файлов, которое может открыть данный процесс, составляет 10 240.
Вы можете проверить это с:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Вы можете увеличить лимиты (на свой страх и риск) с помощью:
sysctl -w kern.maxfiles=20480 (или любой другой номер, который вы выберете)
sysctl -w kern.maxfilesperproc=18000 (или любой другой номер, который вы выберете)
Чтобы сделать изменение постоянным, используйте sudoдля установки ваших настроек /etc/sysctl.conf(которые вам, возможно, придется создать), например:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Примечание: в OS X 10.10 или ниже, вы можете добавить настройки в /etc/launchd.conflike, limit maxfilesи они будут переопределять все, что вы здесь указали.
Опять же из статьи:
После того, как вы это сделаете, само ядро будет иметь максимальное количество файлов, но оболочка может этого не делать. А поскольку большинство процессов, которые будут обрабатывать такое количество файлов, будут инициироваться оболочкой, вы захотите увеличить их.
Команда для этого:
ulimit -S -n 2048 # or whatever number you choose
Это изменение также временно; это длится только для текущего сеанса оболочки. Вы можете добавить его в свой файл конфигурации оболочки ( .bashrc, .zshrcили любой другой ) , если вы хотите, чтобы работать каждый раз , когда вы открываете оболочку.
какое ограничение применяется к процессам, запускаемым нажатием на значки в области запуска? И как изменить это ограничение? Когда вы говорите «оболочка», я предполагаю, что вы имеете в виду интерактивную терминальную оболочку.
Cheeso
@Cheeso - я думаю, что общий системный предел (sysctl) или предел запуска, в зависимости от того, что ниже, контролирует это.
Натан Лонг
1
создание /etc/launchd.conf с ограничением содержимого maxfiles 1000000 1000000 отлично работает для меня! (OSX 10.8.2 здесь)
Zugwalt
1
Я положил kern.maxfiles=65000 kern.maxfilesperproc=65000в /etc/sysctl.conf и перезагрузился. kern.maxfiles был проигнорирован и остался по умолчанию, но kern.maxfilesperproc был установлен на 65000. У меня нет /etc/launchd.conf, так что с этим?
pferrel
2
Если у кого-то есть проблемы с не прилипающими файлами max, это потому, что после строки maxfiles есть пробел, который необходимо удалить.
Джатман
62
Кажется, что существует совершенно другой метод для изменения лимита открытых файлов для каждой версии OS X!
Для OS X Sierra (10.12.X) вам необходимо:
1.
Создайте файл в /Library/LaunchDaemons/limit.maxfiles.plistи вставьте в него следующее (не стесняйтесь менять два числа (это мягкие и жесткие ограничения соответственно):
Вам нужно будет увеличить настройки ulimit - в наши дни это довольно мало для OS X - по умолчанию 256. Добавить ulimit -n 4096или похожий на ваш ~ / .profile или эквивалент , и что будет решить в вашей местной среде. Запустите, ulimit -aчтобы проверить свои текущие уровни
Чтобы увидеть системные настройки, запустите это:
launchctl limit maxfiles
В Lion (10240) он установлен немного выше для каждого процесса, чем раньше. Но если вы все еще нажимаете на него, вы можете установить его выше, используя ту же команду с желаемыми уровнями. Чтобы сделать изменения постоянными /etc/launchd.conf, вам нужно добавить соответствующие строки.
Для последних macOS (на момент написания: 10.14.1) вы можете использовать sudo launchctl limit maxfiles 64000 524288(по умолчанию было 256), но это работает только в текущем сеансе. Используйте launchctlработу от @ninjaPixel ( https://superuser.com/a/1171028/760235 ) для постоянного решения.
Хотя это может быть обходной путь, на самом деле он не отвечает на вопрос. Возможно, объяснение того, что вы не можете избавиться от сообщения, а затем предложение этого как одного из способов сделать его менее важным, улучшило бы ваш ответ.
Чтобы проверить текущие ограничения в вашей системе Mac OS X, запустите:
launchctl limit maxfiles
Последние два столбца - это мягкие и жесткие ограничения соответственно.
Чтобы настроить ограничения открытых файлов в масштабе всей системы в Mac OS X Yosemite, необходимо создать два файла конфигурации. Первым является файл списка свойств (он же plist) в /Library/LaunchDaemons/limit.maxfiles.plist, который содержит следующую конфигурацию XML:
Это установит лимит открытых файлов в 200000. Второй файл конфигурации plist должен храниться в /Library/LaunchDaemons/limit.maxproc.plist со следующим содержимым:
Оба файла plist должны принадлежать пользователю root: wheel и иметь права доступа -rw-r - r--. Эти разрешения должны быть включены по умолчанию, но вы можете убедиться в их наличии, запустив sudo chmod 644. Несмотря на то, что описанные выше шаги приведут к тому, что лимиты на общесистемные открытые файлы будут правильно установлены при перезапуске, вы можете применить их вручную, запустив launchctl limit.
В дополнение к установке этих ограничений на системном уровне, мы рекомендуем также установить на уровне сеанса, добавив следующие строки в ваш bashrc, bashprofile или аналогичный файл:
ulimit -n 200000
ulimit -u 2048
Как и файлы plist, ваш bashrc или аналогичный файл должен иметь права доступа -rw-r - r--. На этом этапе вы можете перезагрузить компьютер и ввести ulimit -n в свой терминал. Если ваша система настроена правильно, вы должны увидеть, что для maxfiles установлено значение 200000.
Вы можете следовать этой статье для более подробной информации.
Либо сообщение следует пометить как дубликат, если ответ уже есть, в противном случае, пожалуйста, опубликуйте соответствующую информацию по ссылке, так как ссылка может быть недействительной вечно.
Ответы:
Согласно этой полезной статье (которую я рекомендую прочитать):
Вы можете проверить это с:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Вы можете увеличить лимиты (на свой страх и риск) с помощью:
sysctl -w kern.maxfiles=20480
(или любой другой номер, который вы выберете)sysctl -w kern.maxfilesperproc=18000
(или любой другой номер, который вы выберете)Чтобы сделать изменение постоянным, используйте
sudo
для установки ваших настроек/etc/sysctl.conf
(которые вам, возможно, придется создать), например:Примечание: в OS X 10.10 или ниже, вы можете добавить настройки в
/etc/launchd.conf
like,limit maxfiles
и они будут переопределять все, что вы здесь указали.Опять же из статьи:
Команда для этого:
Это изменение также временно; это длится только для текущего сеанса оболочки. Вы можете добавить его в свой файл конфигурации оболочки (
.bashrc
,.zshrc
или любой другой ) , если вы хотите, чтобы работать каждый раз , когда вы открываете оболочку.источник
kern.maxfiles=65000 kern.maxfilesperproc=65000
в /etc/sysctl.conf и перезагрузился. kern.maxfiles был проигнорирован и остался по умолчанию, но kern.maxfilesperproc был установлен на 65000. У меня нет /etc/launchd.conf, так что с этим?Кажется, что существует совершенно другой метод для изменения лимита открытых файлов для каждой версии OS X!
Для OS X Sierra (10.12.X) вам необходимо:
1. Создайте файл в
/Library/LaunchDaemons/limit.maxfiles.plist
и вставьте в него следующее (не стесняйтесь менять два числа (это мягкие и жесткие ограничения соответственно):2. Измените владельца вашего нового файла:
3. Загрузите эти новые настройки:
4. Наконец, проверьте правильность лимитов:
источник
IO Error: Bad file descriptor (Write failed)
Вам нужно будет увеличить настройки ulimit - в наши дни это довольно мало для OS X - по умолчанию 256. Добавить
ulimit -n 4096
или похожий на ваш ~ / .profile или эквивалент , и что будет решить в вашей местной среде. Запустите,ulimit -a
чтобы проверить свои текущие уровниЧтобы увидеть системные настройки, запустите это:
В Lion (10240) он установлен немного выше для каждого процесса, чем раньше. Но если вы все еще нажимаете на него, вы можете установить его выше, используя ту же команду с желаемыми уровнями. Чтобы сделать изменения постоянными /etc/launchd.conf, вам нужно добавить соответствующие строки.
источник
ulimit -a
).Другой вариант может найти виновника:
Для последнего вы можете увидеть, какие файлы открыты:
И убить процесс, если так хочется
Из комментариев:
источник
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
для предотвращения усечения имени процесса.Народ, на Маверикс 10.9.4
ulimit -n 2048
работает отлично. Возможно, вам потребуется запустить новый сеанс входа в систему.источник
Для последних macOS (на момент написания: 10.14.1) вы можете использовать
sudo launchctl limit maxfiles 64000 524288
(по умолчанию было 256), но это работает только в текущем сеансе. Используйтеlaunchctl
работу от @ninjaPixel ( https://superuser.com/a/1171028/760235 ) для постоянного решения.источник
Вы можете запустить
какой процесс открыть слишком много файлов.
тогда убей это.
или же
измените это на большее.
источник
После всех изменений выше моего java не сделал более 10000 файлов. Решением был этот флаг jvm -XX: -MaxFDLimit
источник
Я столкнулся с этим, когда выполнял команду chmod -R, поэтому я справился с этим, сделав меньшие шаги, например
источник
Аналогично https://superuser.com/a/1171028/367819
Чтобы проверить текущие ограничения в вашей системе Mac OS X, запустите:
Последние два столбца - это мягкие и жесткие ограничения соответственно.
Чтобы настроить ограничения открытых файлов в масштабе всей системы в Mac OS X Yosemite, необходимо создать два файла конфигурации. Первым является файл списка свойств (он же plist) в /Library/LaunchDaemons/limit.maxfiles.plist, который содержит следующую конфигурацию XML:
Это установит лимит открытых файлов в 200000. Второй файл конфигурации plist должен храниться в /Library/LaunchDaemons/limit.maxproc.plist со следующим содержимым:
Оба файла plist должны принадлежать пользователю root: wheel и иметь права доступа -rw-r - r--. Эти разрешения должны быть включены по умолчанию, но вы можете убедиться в их наличии, запустив sudo chmod 644. Несмотря на то, что описанные выше шаги приведут к тому, что лимиты на общесистемные открытые файлы будут правильно установлены при перезапуске, вы можете применить их вручную, запустив launchctl limit.
В дополнение к установке этих ограничений на системном уровне, мы рекомендуем также установить на уровне сеанса, добавив следующие строки в ваш bashrc, bashprofile или аналогичный файл:
Как и файлы plist, ваш bashrc или аналогичный файл должен иметь права доступа -rw-r - r--. На этом этапе вы можете перезагрузить компьютер и ввести ulimit -n в свой терминал. Если ваша система настроена правильно, вы должны увидеть, что для maxfiles установлено значение 200000.
Вы можете следовать этой статье для более подробной информации.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Не забудьте перезагрузить Mac, чтобы значения вступили в силу.
источник