Как увеличить ulimit на экземпляре Amazon EC2?

После входа по SSH в инстанс EC2 с Amazon Linux AMI я попробовал:

ulimit -n 20000

... и получил следующую ошибку:

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

Однако оболочка позволяет мне уменьшить это число только для текущего сеанса.

Можно ли как-то увеличить ulimit для экземпляра EC2 (постоянно)?


person dmodulus    schedule 05.07.2012    source источник


Ответы (3)


На самом деле изменение значений с помощью команды ulimit применяется только к текущему сеансу оболочки. Если вы хотите навсегда установить новое ограничение, вы должны отредактировать файл /etc/security/limits.conf и установить жесткие и мягкие ограничения. Вот пример:

# <domain> <type> <item>  <value>
    *       soft  nofile  20000
    *       hard  nofile  20000

Сохраните файл, выйдите из системы, войдите снова и проверьте конфигурацию с помощью команды ulimit -n. Надеюсь, поможет.

P.S. 1: Имейте в виду следующее:

  • Мягкий предел: значение, которое ядро ​​применяет для соответствующего ресурса.
  • Жесткий лимит: работает как потолок для мягкого лимита.

P.S. 2: Дополнительные файлы в /etc/security/limits.d/ могут повлиять на настройку в limits.conf.

person Viccari    schedule 05.07.2012
comment
Re - PS2 - если вы хотите изменить эти значения, рекомендуется добавить файл в limit.d, так как они имеют приоритет. Мое предложение — не редактировать limit.conf напрямую. - person Ross; 12.07.2014
comment
Вы уверены, что вам нужна перезагрузка? Я думаю, что достаточно выйти и снова войти. - person Daniel Darabos; 15.10.2014
comment
Можно использовать ulimit -n, чтобы увидеть разрешенное количество открытых файлов (в отличие от ulimit -a) - person Eran Chetzroni; 04.08.2015
comment
Какое имя файла мне нужно использовать в limit.d? Пределы.conf в порядке? - person Jackie; 10.12.2015
comment
@ Джеки, да, все в порядке. Вы можете выбрать любое обычное имя файла, главное, чтобы расширение было conf. - person Viccari; 10.12.2015
comment
mongodb теперь имеет официальную документацию по этой проблеме: docs.mongodb.com/ecosystem/platforms/ амазон-ec2 - person user1709076; 13.06.2016
comment
Большое спасибо! Конфигурация докера ELK также требует увеличения ulimit. Я застрял, потому что установил мягкий предел только до того, как прочитал ваш ответ. - person Patrick Pötz; 21.12.2018
comment
Имейте в виду, таким образом я заблокировал себя от SSH-соединения с инстансом EC2. Я установил почти все на неограниченный, так что, возможно, это было слишком агрессивно. Если это произошло, вы всегда можете удалить свой файл /etc/security/limits.d/whatever, используя функцию данных пользователя при загрузке. - person AlexMayle; 30.03.2019

Спасибо за ответ. Для меня было недостаточно просто обновить /etc/security/limits.conf. Обновлялся только ulimit -n «открытых файлов», а nproc не обновлялся. После обновления /etc/security/limits.d/whateverfile nproc «ulimit -u» также обновился.

Шаги:

  • sudo vi /etc/security/limits.d/whateverfile
  • Ограничения обновления, установленные для nproc/nofile
  • sudo vi /etc/security/limits.conf
*  soft  nproc  65535
*  hard  nproc  65535
*  soft  nofile 65535
*  hard  nofile 65535
  • Перезагрузите машину sudo reboot

P.S. Я не смог добавить его в качестве комментария, поэтому пришлось опубликовать как ответ.

person Sachin G    schedule 25.10.2019
comment
Спасибо за Ваш ответ. Мне пришлось установить ограничения как в limits.conf, так и в limits.d/whateverifle, чтобы ulimit правильно вступил в силу. Я сделал это на Ubuntu 18.04 AMI на экземпляре ec2. - person user238607; 25.05.2021

У меня недостаточно очков репутации, чтобы прокомментировать ... извините за свежий ответ, но, возможно, это удержит кого-то от потери часа.

Ответ Виккари, наконец, решил эту головную боль для меня. Любой другой источник говорит вам отредактировать файл limit.conf, а если это не сработает, добавить

session   required    pam_limits.so

в файл /etc/pam.d/common-session

НЕ ДЕЛАЙТЕ ЭТОГО!

Я использую экземпляр Ubuntu 18.04.5 EC2, и это полностью заблокировало меня от SSH. Я мог войти в систему, но как только он собирался отправить меня в подсказку, он разорвал мое соединение (я даже видел все приветственные сообщения и прочее). Verbose показал это как последнюю ошибку:

fd 1 is not O_NONBLOCK

и я не мог найти ответ на то, что это значит. Итак, после выключения экземпляра, подождав около часа, чтобы сделать снимок тома, а затем подключить его к другому работающему экземпляру, я удалил редактирование в файле common-session и бах, вход по SSH снова заработал.

Исправление, которое сработало для меня, заключалось в поиске файлов в папке /etc/security/limits.d/ и их редактировании.

(и нет, мне не нужно было перезагружаться, чтобы получить новые ограничения, просто выйдите из системы и снова войдите)

person Steveo    schedule 04.02.2021