26

Я на 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

3 ответа3

38

Хорошо, я наконец понял это. Ограничения, которые я устанавливал в /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
    
6

Не нужно ничего менять в файле /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 .

Обратитесь к man systemd-system.conf за подробностями.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .