Как увеличить максимальное количество открытых файлов в Ubuntu 18.04?

16

Я запустил ulimit -n 65536, добавил следующие строки /etc/security/limits.conf:

*    soft nofile 65536
*    hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536

И добавил session required pam_limits.soк обоим:

  • /etc/pam.d/common-session
  • /etc/pam.d/common-session-noninteractive

И fs.file-max = 65536к /etc/sysctl.d/60-file-max.conf.

Тем не менее, после перезапуска и работы ulimit -nна моем сеансе я получаю только 4096 (раньше было 1024).

Что мне не хватает?

Аликс Аксель
источник

Ответы:

12

Из руководства:

 -n     The maximum number of open file descriptors (most
        systems do not allow this value to be set)

systemd есть опция для этого:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=

Но это также только для графических пользовательских настроек. Удалите #и вы можете установить его на 65536.

Комментарий Даниэля Фернандеса :

DefaultLimitNOFILE=65536 

может также понадобиться в

/etc/systemd/user.conf 
Rinzwind
источник
1
Забыл упомянуть, я тоже это сделал.
Аликс Аксель
1
@AlixAxel: Этот ответ работал для меня, в дополнение к * - nofile 16384(я только пытался 16384) в /etc/security/limits.conf.
Дуг Смитис
65k - это предположение, и можно ожидать, что существуют жестко закодированные пределы для верхней части того, что разрешено. Возможно, вы захотите начать ниже, как указывал Дуг;)
Rinzwind
Что вы подразумеваете под «Но это также только для графических пользовательских настроек»?
Синан
1
Настройка примечания DefaultLimitNOFILE=65536может также потребоваться в/etc/systemd/user.conf
Даниэль Фернандес
2

Ubuntu 18.04 Step by Step

Надеюсь, все это поможет, довольно долго, но это работает (с доказательством)

Я сталкивался с этой темой во время установки MongoDb на Ubuntu 18.04

https://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

Как видите, он довольно старый, но у меня работает.

Вот что я сделал.

  1. Рекомендуемые настройки MongoDb ( https://docs.mongodb.com/manual/reference/ulimit/#review-and-set-resource-limits )

    • -f (размер файла): не ограничено
    • -t (время процессора): не ограничено
    • -v (виртуальная память): не ограничено [1]
    • -l (размер заблокирован в памяти): не ограничен
    • -n (открыть файлы): 64000
    • -m (объем памяти): не ограничено [1] [2]
    • -u (процессы / потоки): 64000
  2. Проверьте мои текущие ограничения

ubuntu @ isdb-stage: ~ $ ulimit -a
основной размер файла (блоки, -c) 0
размер сегмента данных (в килобайтах, -d) неограничен
приоритет планирования (-e) 0
размер файла (блоков, -f) неограничен
ожидающие сигналы (-i) 7873
Максимальная заблокированная память (Кбайт, -l) 16384
максимальный объем памяти (кбайт, -м) неограничен
открыть файлы (-n) 1024
размер трубы (512 байт, -p) 8
Очереди сообщений POSIX (байты, -q) 819200
приоритет в реальном времени (-r) 0
размер стека (кбайт, -s) 8192
время процессора (секунды, -t) не ограничено
максимальное количество пользовательских процессов (-u) 7873
виртуальная память (кбайт, -v) не ограничена
файловые блокировки (-x) не ограничены
  1. Запишите, что требует изменения

    • размер заблокированной памяти , должен быть неограниченным.
    • открыть файлы , необходимо установить 64000
    • процессы / потоки * , должен быть установлен на 64000
  2. Что Ubuntu говорит о том, как изменить эти ограничения?

$ man limit.conf

ИМЯ
   limit.conf - файл конфигурации для модуля pam_limits

ОПИСАНИЕ
   Модуль pam_limits.so применяет ограничения ulimit, хороший приоритет и ограничение количества одновременных сеансов входа в систему для сеансов входа пользователя. Это описание синтаксиса файла конфигурации относится к

       Файл /etc/security/limits.conf и файлы * .conf в 
       /etc/security/limits.d каталог.
  1. Кажется, достаточно ясно, отредактируйте файл /etc/security/limits.conf. Хорошо, давайте разберемся ...

Вот начало этого файла, и посмотрите, что в нем даже есть инструкции, помните, что это открытый исходный код, написанный хорошими парнями! :)

    vi /etc/security/limits.conf

    # /etc/security/limits.conf 
    # Каждая строка описывает ограничение для пользователя в форме:                                                                   
    #                                                                                
    #Где:                                                               
    # возможно:
    # - имя пользователя

(Посмотрите файл самостоятельно, если вы хотите больше деталей)
  1. Наконец внесите изменения. Поскольку MongoDb работает как группа и пользователь mongodb, было бы неплохо повысить ограничения только для пользователей. Я видел '*' здесь и там, для меня это угроза безопасности. Это дает всем и каждому на сервере эти ограничения, которые могут быть использованы для максимального использования вашего сервера. Итак, давайте сделаем их только для пользователя mongodb.

Вот мои изменения: -

Mongodb Soft Memlock неограниченно
Mongodb жесткая блокировка без ограничений
mongodb soft нофиле 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000
  1. И наконец, наконец, запомните это в записи man limit.conf.

    limit.conf - файл конфигурации для модуля pam_limits

    Лучше убедиться, что модуль pam_limits загружен, чтобы все это работало. Для этого вы редактируете /etc/pam.d/common-session. Конечно, это также на странице руководства.

sudo vi /etc/pam.d/common-session

# Добавьте это, чтобы убедиться, что pam_limits.so загружен.
требуется сеанс pam_limits.so

Перезагрузка покажет ограничения (для пользователя mongodb) были применены. Если вы применили их, используя вместо этого '*', вы можете проверить, не переключаясь на пользователя mongodb. Просто выполните эту команду.

$ ulimit -a

основной размер файла (блоки, -c) 0
размер сегмента данных (в килобайтах, -d) неограничен
приоритет планирования (-e) 0
размер файла (блоков, -f) неограничен
ожидающие сигналы (-i) 7873
Максимальное количество заблокированной памяти (в килобайтах, -l) не ограничено
максимальный объем памяти (кбайт, -м) неограничен
открыть файлы (-n) 64000
размер трубы (512 байт, -p) 8
Очереди сообщений POSIX (байты, -q) 819200
приоритет в реальном времени (-r) 0
размер стека (кбайт, -s) 8192
время процессора (секунды, -t) не ограничено
максимальное количество пользовательских процессов (-u) 64000
виртуальная память (кбайт, -v) не ограничена
файловые блокировки (-x) не ограничены

Как видите, пухло жабло все настроено так, как мы хотели.

englishPete
источник