Как увеличить максимальный предел открытия файлов (ulimit) в Ubuntu?

77

В настоящее время ulimit -n отображается 10000. Я хочу увеличить его до 40000. Я отредактировал "/etc/sysctl.conf" и поместил fs.file-max=40000. Я также отредактировал /etc/security/limits.conf и обновил жесткие и мягкие значения. Но все же ulimit показывает 10000. Сделав все эти изменения, я перезагрузил свой ноутбук. У меня есть доступ к корневому паролю.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

Добавлено следующие строки в /etc/security/limits.conf -

*     soft    nofile          40000
*     hard    nofile          40000

Я также добавил следующую строку в /etc/pam.d/su -

session    required   pam_limits.so

Я пробовал все возможные способы, как это давалось на других форумах, но я могу достичь максимального предела 10000, а не дальше этого. В чем может быть проблема?

Я делаю это изменение, потому что neo4j выдает максимальные допустимые пределы открытого файла.

  • 0
    Вы сделали все правильно, просто перезагрузите систему и все заработает: sudo ulimit -n 40000
  • 0
    @ 0x90 Я перезагрузил систему. Но даже тогда это не меняется.
Показать ещё 4 комментария
Теги:
neo4j
limit
ulimit

10 ответов

7
Лучший ответ

Я использую Debian, но это решение должно отлично работать с Ubuntu.
Вы должны добавить строку в neo4j-service script.
Вот что я сделал:

nano/etc/init.d/neo4j-service
Добавьте" ulimit -n 40000" перед тем, как start-stop-daemon line в разделе do_start

Обратите внимание, что я использую версию 2.0 Enterprise Edition. Надеюсь, это поможет вам.

  • 13
    FWIW нет такого скрипта на Ubuntu Server 14.04. Мое решение было найдено в этом вопросе (и ответе lornix): askubuntu.com/questions/162229/… - короче, вам нужно отредактировать /etc/security/limits.conf и /etc/pam.d/common-session*
  • 1
    Я вижу, что оригинальный спрашивающий упомянул neo4j мимоходом. Похоже, что это относится к теме вопроса, так как это не имеет ничего общего с Ubuntu.
Показать ещё 4 комментария
85

То, что вы делаете, не будет работать для пользователя root. Возможно, вы используете свои службы как root, и, следовательно, вы не видите изменения.

Чтобы увеличить ulimit для пользователя root, вы должны заменить * на root. * не применяется для пользователя root. Отдых - это то же самое, что и вы. Я перепишу его здесь.

Добавьте в файл следующие строки: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

Затем добавьте следующую строку в файл: /etc/pam.d/common-session

session required pam_limits.so

Это обновит ulimit для пользователя root. Как уже упоминалось в комментариях, вам даже не нужно перезагружаться, чтобы увидеть изменения.

  • 2
    На самом деле вам не нужно перезагружаться, чтобы новый лимит вступил в силу. Смысл редактирования файла /etc/pam.d/common-session заключается в том, что создание любого нового сеанса приведет к обработке файлов пределов.
  • 1
    Эта процедура работает. Перезагрузка не требуется. Просто выйдите и войдите снова, чтобы увидеть результат.
Показать ещё 3 комментария
65

1) Проверьте ограничение sysctl file-max:

$ cat /proc/sys/fs/file-max

Если предел ниже желаемого значения, откройте sysctl.conf и добавьте эту строку в конец файла:

fs.file-max = 65536

Наконец, примените пределы sysctl:

$ sysctl -p 

2) Измените /etc/security/limits.conf и добавьте ниже упомянутый

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

Эти ограничения не будут применяться для пользователя root, если вы хотите изменить ограничения root, которые вы должны сделать это явно:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Перезагрузите систему или добавьте следующую строку в конец /etc/pam.d/common-session:

session required pam_limits.so

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

4) Проверьте мягкие пределы:

$ ulimit -a

и жесткие ограничения:

$ ulimit -Ha
....

open files                      (-n) 65535

Ссылка: http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html

  • 1
    Убедитесь, что вы вышли из системы и вернулись, чтобы она могла отражать ваши изменения, если вы не проверяете это с пользователем root, для Ubuntu вы можете сделать это с помощью gnome-session-quit
  • 0
    / proc / sys / fs / file-max НЕ является МАКСИМАЛЬНЫМ nofile, разрешенным системой !!! Например, в моей системе по умолчанию установлено значение 1528702. Установка этого значения для мягких / жестких пределов в limit.conf не позволяет пользователю вообще увеличивать пределы с 1024. Мне пришлось установить limit.conf на что-то гораздо более консервативное, например, 256 * 1024 = 262144, и, наконец, ulimit -a показывает то же самое для обычного пользователя.
3

У меня была такая же проблема, и я получил ее, добавив записи в /etc/security/limits.d/90-somefile.conf. Обратите внимание, что для того, чтобы увидеть лимиты работы, мне пришлось полностью выйти из сеанса ssh, а затем снова войти в систему.

Я хотел установить ограничение для конкретного пользователя, который запускает службу, но кажется, что я получаю ограничение, установленное для пользователя, в который я входил. Вот пример, показывающий, как ulimit устанавливается на основе аутентифицированного пользователя, а не эффективного пользователя:

$ sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ sudo -i
# ulimit -n
10240    # loginuser limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser limit.

Вы можете использовать *, чтобы указать увеличение для всех пользователей. Если я перезапущу службу в качестве пользователя, вошедшего в систему, и добавлю ulimit -n в init script, я вижу, что пользовательские лимиты пользовательского входа на месте. У меня не было возможности проверить, какие лимиты пользователей используются во время загрузки системы, или для определения того, какой фактический предел nofile для службы, которую я запускаю (которая запускается с помощью запуска-остановки-демона).

Есть два подхода, которые работают сейчас:

  • добавьте настройку ulimit в init script, непосредственно перед запуском-остановкой.
  • или более обширные настройки ulimit в файле безопасности.
  • 0
    когда я делаю то, что вы сделали (начиная с whoami ), я сначала получаю 1024, затем 65536 (для root), затем 65536 для пользователя. Но первым был тот же пользователь. У вас есть объяснение этому, я сбит с толку
  • 0
    Это звучит странно. Как вы переключаетесь с пользователя на root и обратно на пользователя? Вы полностью вышли из системы после установки файла? сначала вы можете быть в кэшированном сеансе, а затем использовать новый сеанс в зависимости от того, как вы вернетесь к пользователю.
Показать ещё 1 комментарий
2

Я сделал это так:

echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/
2

tl; dr устанавливает как мягкие, так и жесткие пределы

Я уверен, что он работает по назначению, но я добавлю его здесь на всякий случай. Для полноты здесь задан предел (см. Ниже синтаксис): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

и активируется следующим образом:/etc/pam.d/common-session:

session required pam_limits.so

Если вы установите только жесткий предел, ulimit -a отобразит значение по умолчанию (1024): Если вы установите только мягкий предел ulimit -a, вы увидите (4096)

Если вы установите их как ulimit -a, будет отображаться мягкий предел (до жесткого предела)

2

Конфигурация ULIMIT:

  • Вход по root
  • vi security/limits.conf
  • Сделайте ниже запись

    Начало настройки Ulimit для веб-сайта

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  • После изменения файла пользователю необходимо снова выйти и войти в систему, чтобы увидеть новые значения.

2

Попробуйте запустить эту команду, она создаст файл *_limits.conf в /etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

Просто выйдите из терминала и снова войдите в систему и подтвердите с помощью ulimit -n он установит для * users

  • 0
    Простой и полезный ответ.
  • 0
    Спасибо @sumanth, рад помочь вам.
2

У меня много проблем с тем, чтобы это работало.

Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.

sudo sysctl -w fs.inotify.max_user_watches=100000

Edit

Просто увидел это у другого пользователя на другом сайте stackexchange (оба работают, но эта версия постоянно обновляет системные настройки, а не временно):

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p
2

Вы можете изменить init script для neo4j, чтобы выполнить ulimit -n 40000 перед запуском neo4j.

Однако я не могу не чувствовать, что вы лаем неправильное дерево. Разрешено ли neo4j более 10 000 дескрипторов открытых файлов? Это очень похоже на ошибку в neo4j или на то, как вы ее используете. Я бы попытался решить эту проблему.

  • 0
    Я запускаю neo4j используя neo4j start . Где я могу найти сценарий инициализации для него?
  • 0
    попробуйте набрать ulimit -n 40000 перед neo4j start
Сообщество Overcoder
Наверх
Меню