2012-06-07 08:52:49 +0000 2012-06-07 08:52:49 +0000
202
202

Исправлена ошибка "Слишком много открытых файлов в системе" в OS X 10.7.1?

Мне нужно избавиться от надоедливого лимита “Слишком много открытых файлов в системе” в OS X 10.7.1. 

Есть ли способ?

Ответы (10)

234
234
234
2012-06-29 20:23:19 +0000

Согласно этой полезной статье (которую я рекомендую прочитать):

По умолчанию максимальное количество файлов, которое 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, чтобы поместить ваши настройки в /etc/launchd.conf (которые вам, возможно, придется создать), как это:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Примечание: В OS X 10. 10 или ниже, вы можете добавить настройки в limit maxfiles, как .bashrc, и это отменит все, что вы здесь поместили.

Еще раз, из статьи:

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

Команда для этого:

ulimit -S -n 2048 # or whatever number you choose

Команда для этого:

Команда для этого:

Это изменение также временное; оно длится только до текущего сеанса оболочки командной строки. Вы можете добавить ее в ваш конфигурационный файл оболочки (.zshrc, &007 или любой другой), если хотите, чтобы она запускалась каждый раз, когда вы открываете оболочку.

63
63
63
2017-01-24 14:56:37 +0000

Кажется, что существует совершенно другой метод изменения ограничения открытых файлов для каждой версии OS X!

Для OS 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
```.
34
34
34
2012-06-07 11:09:52 +0000

Вам нужно будет увеличить параметры ультимитов - в наши дни в OS X их довольно мало - 256 по умолчанию. Добавьте ulimit -n 4096 или что-то подобное к вашему ~/.профилю или эквивалентному, и это решит проблему в вашем локальном окружении. Запустите ulimit -a для проверки текущего уровня

Чтобы посмотреть системные настройки, запустите следующее:

launchctl limit maxfiles

В Lion (10240) для каждого процесса установлено немного больше, чем раньше. Но если вы все еще нажимаете на него там, то вы можете установить его выше, используя ту же команду с нужными уровнями. Чтобы изменения стали постоянными, необходимо добавить соответствующие строки в файле /etc/launchd.conf.

34
34
34
2017-02-18 00:42:52 +0000

Другой вариант - найти виновника:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

Для последнего можно посмотреть, какие файлы открыты:

sudo lsof -n | grep socketfil

And kill the process if so want

kill $pid
  • *

Из комментариев:

lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
``` также можно получить список идентификаторов процесса с наиболее открытыми файлами.
10
10
10
2014-09-04 16:19:11 +0000

Народ, на Mavericks 10.9.4 ulimit -n 2048 работает отлично. Возможно, вам понадобится запустить новую сессию входа в систему.

5
5
5
2018-11-23 16:59:24 +0000

Для последней версии macOS (на момент написания статьи: 10.14.1) можно использовать sudo launchctl limit maxfiles 64000 524288 (по умолчанию было 256), но он работает только в пределах текущей сессии. Используйте launchctl job из @ninjaPixel https://superuser.com/a/1171028/760235 ) для постоянного решения.

1
1
1
2017-05-18 02:52:29 +0000

Вы можете запустить

lsof -n

, которые обрабатывают открытые слишком много файлов.

затем убить его

или

sysctl -w kern.maxfiles=20480

изменить его на больший.

1
1
1
2019-01-25 13:15:52 +0000

После всех изменений над моей java не сделало больше 10000 файлов. Решением было использование jvm-флага -XX:-MaxFDLimit.

0
0
0
2019-05-29 17:55:40 +0000

Аналогично https://superuser.com/a/1171028/367819

Чтобы проверить текущие ограничения в системе Mac OS X, запустите:

launchctl limit maxfiles

Последние два столбца являются мягкими и жесткими ограничениями соответственно.

Чтобы настроить ограничения открытых файлов на общесистемной основе в Mac OS X Yosemite, необходимо создать два конфигурационных файла. Первый - это файл со списком свойств (он же plist) в файле /Library/LaunchDaemons/limit.maxfiles.plist, который содержит следующую конфигурацию XML:

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

Это позволит установить лимит открытых файлов на 200000. Второй файл конфигурации plist должен храниться в файле /Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

Оба файла plist должны принадлежать root:wheel и иметь права доступа -rw-r–r–. По умолчанию эти права должны быть установлены, но вы можете убедиться в их наличии, запустив sudo chmod 644 . Хотя описанные выше действия приведут к тому, что при перезагрузке будут корректно установлены общесистемные ограничения на открытые файлы, вы можете применить их вручную, запустив installctl limit.

Помимо установки этих ограничений на системном уровне, мы рекомендуем установить их на уровне сеанса, добавив следующие строки к вашему bashrc, bashprofile или аналогичному файлу:

ulimit -n 200000
ulimit -u 2048

Как и к plist-файлам, ваш bashrc или аналогичный файл должен иметь права доступа -rw-r–r–r. В этот момент вы можете перезагрузить компьютер и ввести в терминал ulimit -n. Если ваша система настроена правильно, вы должны увидеть, что maxfiles установлен на 200000.

  • *

Подробнее об этом можно прочитать в этой статье. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c

Не забудьте перезагрузить ваш Mac, чтобы значения были эффективны.

0
0
0
2016-12-14 18:50:26 +0000

Я столкнулся с ним, когда делал кхмод -R, так что я обошел его, сделав меньшие шаги, например,

# for each directory
find . -type d -exec chmod 755 {} \;
```.

Похожие вопросы

12
5
13
8
3