ulimit PICKLE: «Операция не разрешена» и «Команда не найдена»

15

Я пытаюсь увеличить максимальное количество открытых файлов для текущего пользователя

> ulimit -n
1024

Я пытаюсь увеличить и потерпеть неудачу следующим образом

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Так что я делаю естественное и пытаюсь запустить с временным разрешением, но не могу

> sudo ulimit -n 4096
sudo: ulimit: command not found

Вопросов

  1. Как увеличить ulimit?
  2. Почему это происходит?

Использование Fedora 14

paislee
источник
Ответ на удаленный комментарий: ulimit 4096не работает. Я думаю, что -nэто правильно. В качестве доказательства концепции это работает, если я сначала sudo su - root(но только изменения для корня).
Пейсли
Что такое маринад? SU superuser.com/questions/79717/…
Сиро Сантилли 新疆 '中心 法轮功 六四 事件

Ответы:

17

ulimitэто встроенная оболочка, а не внешняя команда. Его нужно встроить, потому что он действует на сам процесс оболочки, например cd: ограничения, как и текущий каталог, являются свойством этого конкретного процесса.

sudo bash -c 'ulimit -n 4096'будет работать, но это изменит ограничение для процесса bash, вызываемого sudoтолько, что не поможет вам.

Есть два значения для каждого предела: жесткий предел и мягкий предел. Только root может поднять жесткий лимит; любой может снизить жесткий предел, и мягкий предел может быть изменен в любом направлении с единственным ограничением, которое не может быть выше жесткого ограничения. Мягкий предел - это фактическое значение, которое имеет значение.

Поэтому вам нужно организовать, чтобы все ваши процессы имели жесткое ограничение на количество открытых файлов не менее 4096. Можно установить мягкое ограничение на 1024. Прежде чем запускать этот процесс, требующий большого количества файлов, увеличьте мягкое ограничение. В /etc/security/limits.confдобавьте строки

paislee hard nofile 4096
paislee soft nofile 1024

где paisleeимя пользователя, от имени которого вы хотите запустить процесс. В оболочке, которая запускает процесс, для которого вы хотите более высокий предел, запустите

ulimit -Sn unlimited

поднять мягкий предел до жесткого ограничения.

Жиль "ТАК - прекрати быть злым"
источник
1
Альтернативы sudo bash -c- запуск sudo -iоболочки входа и sudo -sзапуск оболочки. Применяются те же ограничения, но это может быть полезно в других обстоятельствах.
Брэм
Благодарю. Могу ли я задать несколько связанных вопросов? Другой ответ и сообщение stackoverflow.com/a/17483998/156458 и unix.stackexchange.com/a/238413/674 и unix.stackexchange.com/a/169035/674 рекомендуются для использования sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Но и то, ulimit -c 1024и другое exec su $LOGNAME" влияет только на созданную оболочку sudo, так какова цель команды? exec su $LOGNAME"также не делает ничего значимого, чтобы использовать измененный лимит. Я очень смущен и думаю, что я что-то упускаю.
Тим
Обратите внимание, что ulimit -Sn unlimitedне работает на большинстве оболочек. Правильный метод - вызвать, ulimit -aа затем вызвать, ulimit -n <number>где <номер - это жесткий предел (правый столбец).
Шили
3

откройте файл /etc/security/limits.confи добавьте строку <user> soft nofile <value>. за использование ulimitизменений для пользователя root и попробуйте то же самое.

harish.venkat
источник