Неможливо збільшити ліміт відкритого файлу за останні 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

Відповіді:


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
    
  • Перезавантажте комп'ютер, щоб зміни набрали чинності.


2
DefaultLimitNOFILE=65535зробив трюк. Але чому це /etc/security/limits.conf не працює?
Сувітруф каже, що повернеться до Моніки

6
Для входу в GUI використовується systemd, який, мабуть, має власну конфігурацію ( /etc/systemd/system.conf), яка не залежить від звичайної конфігурації для термінальних сеансів ( /etc/security/limits.conf). Я не знаю достатньо про systemd, щоб знати, чому це було реалізовано таким чином.
mkasberg

1
@Suvitruf , тому що ігнорується в Systemd системі. Я публікую відповідь.
Марк.2377

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як корінь

  3. вийти та знову увійти

  4. перевірити новий ліміт за допомогою ulimit -n.

Зверніться до systemd-system.confсторінок керівництва для деталей.


У моїй системі Ubuntu 18.10 знаходиться відповідний файл /etc/systemd/system.conf. Внесення змін там, схоже, зробило трюк, дякую.
Стівен Кеннеді

1
Просто вихід із системи для мене не працював (Ubuntu 18.04), але перезапуск зробив цю роботу. Дуже елегантне рішення, дякую.
stann1

0

Використовуючи Ubuntu 17.04, я отримав описаний жорсткий ліміт:

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

Я міг би знизити його за допомогою ulimit, але не збільшити його так, як описує це питання. ulimitПосібник описує:

тільки корінь може збільшити жорстку межу.

Тому я спробував встановити вищу межу приблизно /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 = нескінченність

ЛімітNOFILE = 65535

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

це працює для мене.


0

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

Є два місця, які слід врахувати.

  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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.