Увеличение ulimit [dубликат]

Это происходит на Ubuntu Release 12.04 (точный) 64-разрядный Kernel Linux 3.2.0-25-virtual

Я пытаюсь увеличить количество открытых файлов, разрешенных для пользователя. Это для моего приложения ecplise java, где текущий предел 1024 не достаточен.

Согласно сообщениям, которые я нашел до сих пор, я должен был бы поместить строки в

/etc/security/limits.conf следующим образом:

soft nofile 4096 hard nofile 4096

, чтобы увеличить количество открытых файлов, разрешенных для всех пользователей.

Но это не работает для меня, и Я думаю, что проблема не связана с этим файлом.

Для всех пользователей ограничение по умолчанию равно 1024, независимо от того, что находится в /etc/security/limits.conf (я перезагрузился после изменения этого файла )

$ ulimit -n 1024

Теперь, несмотря на записи в файле /etc/security/limits.conf, я не могу этого увеличить,

$ ulimit -n 2048

-bash: ulimit: открыть файлы: не может изменить предел: операция не разрешена. Странная часть заключается в том, что я могу изменить предел вниз, но не могу изменить его вверх - даже вернуться к числу, которое ниже исходного предела;

$ ulimit -n 800 $ ulimit -n 800 $ ulimit -n 900 -bash: ulimit: open files: cannot modify limit: Operation not permitted

Как root, я могу изменить этот предел на все, что захочу, вверх или вниз. Это даже не похоже на возможный общесистемный предел в / proc / sys / fs / file-max

# cat /proc/sys/fs/file-max 188897 # ulimit -n 188898 # ulimit -n 188898

Но даже я заставляю eclipse работать под управлением root, мое приложение все еще падает из-за исключения «слишком много открытых файлов»!

До сих пор я не нашел способа увеличить ограничение открытых файлов для пользователя без полномочий root.

Как я должен правильно это делать? Я посмотрел несколько других сообщений, но не повезло!

121
задан 8 October 2014 в 16:57

7 ответов

Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:

su USER --shell /bin/bash --command "ulimit -n"

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

15
ответ дан 17 July 2018 в 22:29

Команда ulimit по умолчанию изменяет жесткие пределы, которые вы (пользователь) можете понизить, но не можете повысить.

Используйте параметр -S, чтобы изменить предел SOFT, который может варьироваться от 0- {HARD}.

Я фактически использовал псевдоним ulimit до ulimit -S, поэтому он по умолчанию все время имеет мягкие ограничения.

alias ulimit='ulimit -S'

Что касается вашей проблемы , вы не видите столбец в своих записях в /etc/security/limits.conf.

Должны быть четыре столбца, но в вашем примере отсутствует первый.

* soft nofile 4096 * hard nofile 4096

Первая колонка описывает ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять пределы для -S , вы должны явно ввести «root» вместо «*».

Вам также нужно отредактировать /etc/pam.d/common-session* и добавить следующую строку в конец:

session required pam_limits.so
119
ответ дан 17 July 2018 в 22:29

У меня проблемы с работой.

Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
ответ дан 17 July 2018 в 22:29

Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:

su USER --shell /bin/bash --command "ulimit -n"

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

15
ответ дан 23 July 2018 в 23:07

Команда ulimit по умолчанию изменяет жесткие пределы, которые вы (пользователь) можете понизить, но не можете повысить.

Используйте параметр -S, чтобы изменить предел SOFT, который может варьироваться от 0- {HARD}.

Я фактически использовал псевдоним ulimit до ulimit -S, поэтому он по умолчанию все время имеет мягкие ограничения.

alias ulimit='ulimit -S'

Что касается вашей проблемы , вы не видите столбец в своих записях в /etc/security/limits.conf.

Должны быть четыре столбца, но в вашем примере отсутствует первый.

* soft nofile 4096 * hard nofile 4096

Первая колонка описывает ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять пределы для -S , вы должны явно ввести «root» вместо «*».

Вам также нужно отредактировать /etc/pam.d/common-session* и добавить следующую строку в конец:

session required pam_limits.so
119
ответ дан 23 July 2018 в 23:07
  • 1
    Как изменить Hard limit для максимального количества дескрипторов открытых файлов? Моя проблема в том, что мне нужно разрешить моему приложению Eclipse иметь столько файлов, сколько нужно, но предела 4096 недостаточно, и я хочу установить его как можно выше, возможно, 500000. Моя настройка в лимите .conf как вы упомянули со звездой, и все еще жесткий предел не движется. – iCode 11 July 2012 в 09:13
  • 2
    вы вышли из системы / перезагрузились на этот раз? ulimit -a покажет вам все ограничения, поэтому вы можете сравнить их, если они изменились. – lornix 11 July 2012 в 09:20
  • 3
    Ну, вы обнаружили, что значение / proc / sys / fs / file-max составило 188 897 ... Поэтому я бы сказал, что ваш верхний предел составляет 188 000 (разрешено) и 500 000 (не разрешено). Отмечает, что у вас есть что-то, что требует более 65000 открытых файлов одновременно. Вау. Обычно это обрабатывается на большом железе. Я бы с подозрением относился к программированию, неправильному представлению. (При всем уважении, пожалуйста) – lornix 12 July 2012 в 02:13
  • 4
    вот и все: сеанс нужен pam_limits.so, спасибо! – lethalman 14 November 2013 в 17:15
  • 5
    Сначала я пропустил подстановочный знак в конце /etc/pam.d/common-session* и только что отредактировал common-session, и даже после перезагрузки он не сработал. Но после добавления той же строки (для pam_limits.so) до common-session-noninteractive, ulimit -n отобразило новое значение после нового входа (без перезагрузки). FWIW Я пытался изменить предел для root (только). – Lambart 26 June 2014 в 23:12

У меня проблемы с работой.

Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
ответ дан 23 July 2018 в 23:07
  • 1
    Я пробовал это, так как у меня такая же проблема, но это не сработало $ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024 – grepmaster 7 December 2015 в 15:12

Команда ulimit по умолчанию изменяет пределы HARD, которые вы (пользователь) можете понизить, но не можете повышать.

Используйте параметр -S для изменения ПЛК SOFT, который может варьироваться от 0 - { HARD }.

Я на самом деле был псевдонимом ulimit до ulimit -S, поэтому он по умолчанию постоянно использует мягкие пределы.

alias ulimit='ulimit -S'

Что касается вашей проблемы, вам не хватает столбца в ваших записях в /etc/security/limits.conf.

Должны быть четыре столбца, но в вашем примере отсутствует первый.

* soft nofile 4096
* hard nofile 4096

В первом столбце описывается ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять ограничения для root, вы должны явно ввести «root» вместо «*».

Вам также нужно отредактировать /etc/pam.d/common-session* и добавить следующую строку в конец:

session required pam_limits.so
119
ответ дан 14 August 2018 в 13:47

Другие вопросы по тегам:

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