Невозможно увеличить лимит открытого файла за 4096 (Ubuntu)

34

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

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Это работает. Это не:

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

Похоже, из-за жесткого ограничения:

$ ulimit -Hn
4096

Я попытался добавить эти строки в /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Также добавили эту строку в /etc/pam.d/common-session и /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

После этого я перезагрузил компьютер. Изменения в limit.conf, похоже, ни на что не влияют. Жесткий предел все еще остается на уровне 4096, что не позволяет мне идти выше. Как мне увеличить лимит открытых файлов?


Вот дополнительная информация о конфигурации:

$ cat /proc/sys/fs/file-max 
1624668
mkasberg
источник

Ответы:

56

Хорошо, я наконец понял это. Ограничения, которые я устанавливал в /etc/security/limits.conf, применялись, но они не применялись для графического входа в систему. Это можно проверить так из окна терминала:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Дополнительные исследования привели меня к этому отчету об ошибках , который указал мне правильное направление. Чтобы изменить ограничение, используемое оболочкой входа в систему, нам нужно добавить следующую строку в /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Это изменение работает, но влияет только на мягкое ограничение. (Оставляя нас ограниченным жестким лимитом 4096). Чтобы повлиять и на жесткий лимит, мы должны изменить /etc/systemd/system.conf с тем же изменением.

Изменения, которые я сделал в /etc/pam.d, не были необходимы. По крайней мере, в Ubuntu это уже работает. Кроме того, не было необходимости изменять настройки для rootи *в limit.conf. Изменение пределов mkasbergбыло достаточно, по крайней мере, для моего варианта использования.


В итоге

Если вы хотите увеличить лимит, показанный на ulimit -n, вы должны:

  • Измените /etc/systemd/user.conf и /etc/systemd/system.conf следующей строкой (это заботится о графическом входе в систему):

    DefaultLimitNOFILE=65535
    
  • Измените /etc/security/limits.conf со следующими строками (это учитывает вход в систему без GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Перезагрузите компьютер, чтобы изменения вступили в силу.

mkasberg
источник
2
DefaultLimitNOFILE=65535сделал свое дело. Но почему не /etc/security/limits.conf работает?
Сувитруф говорит восстановить Монику
6
Вход в GUI использует systemd, который, очевидно, имеет свою собственную конфигурацию ( /etc/systemd/system.conf), которая не зависит от обычной конфигурации для сеансов терминала ( /etc/security/limits.conf). Я не знаю достаточно о systemd, чтобы понять, почему он был реализован таким образом.
Мкасберг
1
@Suvitruf, потому что он игнорируется в системе systemd . Я отправляю ответ.
23 марта 1277 г.
1
Просто хочу указать, что пределы для rootпользователя не могут быть определены *или указателями группы. rootлитерал должен быть указан явно.
Петр Яворик
2
Это работает для меня, после перезагрузки .
Шихе Чжан
14

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

(Воспроизведение измененного ответа на другой вопрос в сети ...)

Альтернатива для тех, кто предпочитает не редактировать файлы по умолчанию /etc/systemd/system.confи /etc/systemd/user/conf:

  1. создайте новый файл /etc/systemd/system.conf.d/limits.confс таким содержанием:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. запускать systemctl daemon-reexecс правами root

  3. выйти и снова войти

  4. проверьте ваш новый лимит с ulimit -n.

Обратитесь к systemd-system.confстранице справки для деталей.

Marc.2377
источник
В моей системе Ubuntu 18.10 этот файл находится на /etc/systemd/system.conf. Внесение изменений, кажется, сделало свое дело, спасибо.
Стивен Кеннеди
1
Просто выход из системы для меня не работал (Ubuntu 18.04), но перезапуск сделал работу. Очень элегантное решение, спасибо.
stann1
0

Используя Ubuntu 17.04, я получил жесткое ограничение:

user@paresh.com:~$ ulimit -Hn
4096

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

только root может увеличить жесткий предел.

Поэтому я попытался установить более высокий предел в /etc/security/limits.confследующем виде:

user hard nofile 9999

и новый логин вроде ssh localhost -l userдал мне новый лимит:

user@paresh.com:~$ ulimit -Hn
9999

Я надеюсь, что это работает и для вас.

Пареш Чаухан
источник
0
  1. редактировать /etc/systemd/system/sonar.service

  2. добавить эти две строки в разделе Сервис

[Обслуживание]

LimitMEMLOCK = бесконечность

LimitNOFILE = 65535

  1. systemctl daemon-reload
  2. systemctl перезапустить сонар

это работает для меня.

Мэтью Ма
источник
0

TL; DR Я чувствовал необходимость сконцентрировать ответы, чтобы их было легче найти. Мне понадобились целые годы, чтобы собрать все кусочки, чтобы все работало правильно ...

Есть 2 места для рассмотрения.

  1. GUI сессия

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    или лучше здесь:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. оболочка

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    или лучше здесь:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. После изменения настроек в вышеуказанных файлах перезагрузите компьютер, а затем проверьте пределы с помощью: ulimit -n -Hn -Sn

ультрафиолетовый
источник