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

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

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 выдает ошибку достижения максимального числа открытых файлов.


person theharshest    schedule 02.02.2014    source источник
comment
Вы все сделали правильно, просто перезагрузите систему и все заработает: sudo ulimit -n 40000   -  person 0x90    schedule 03.02.2014
comment
@ 0x90 Я перезагрузил систему. Но даже тогда это не меняется.   -  person theharshest    schedule 03.02.2014
comment
Поскольку он специфичен для Ubuntu, он, вероятно, действительно принадлежит askubuntu.com; похожий вопрос здесь: askubuntu.com/questions/162229/   -  person Lambart    schedule 26.06.2014
comment
после добавления в /etc/security/limits.conf какую службу следует перезапустить, чтобы изменения вступили в силу?   -  person Ashish Karpe    schedule 22.12.2015
comment
Понятно: чтобы изменения в файле / etc / security / limits вступили в силу, пользователь должен выйти из текущего сеанса входа в систему и снова войти в систему.   -  person Ashish Karpe    schedule 22.12.2015


Ответы (10)


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

nano /etc/init.d/neo4j-service
Добавьте «ulimit –n 40000» непосредственно перед строкой start-stop-daemon в разделе do_start

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

person Martin Larivière    schedule 03.02.2014
comment
FWIW нет такого скрипта на Ubuntu Server 14.04. Мое решение было найдено в этом вопросе (и ответе Лорникса): askubuntu.com/questions/162229/ - короче говоря, вам нужно отредактировать /etc/security/limits.conf и /etc/pam.d/common-session* - person Lambart; 26.06.2014
comment
Я вижу, что первоначальный вопросник мимоходом упомянул neo4j. Похоже, что, возможно, это относится к теме вопроса, поскольку не имеет ничего общего с Ubuntu. - person Lambart; 26.06.2014
comment
В Ubuntu 14.04 действительно есть /etc/init.d/neo4j-service файл, и Мартин Ларивьер прав, вставка uname -n 40000 решает проблему. Я не знаю различий между Ubuntu Server и Ubuntu, поэтому, возможно, вы тоже правы, я добавляю это, чтобы прояснить, что то, что написал Мартин, решает проблему с простым Ubuntu 14.04. - person Grégoire C; 26.03.2015
comment
@Lambart, в случае neo4j-service трюк common-session-* не сработает, потому что neo4j-service основан на start-stop-daemon, а start-stop-daemon вообще не использует PAM. Единственное решение - добавить явный ulimit -n xxx вызов в сценарий инициализации. - person David Ammouial; 06.10.2015
comment
Это не выход, это пластырь. - person Tim Wachter; 24.10.2016

То, что вы делаете, не будет работать для пользователя 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. Как упоминалось в комментариях, возможно, вам даже не придется перезагружаться, чтобы увидеть изменения.

person Sambhav Sharma    schedule 21.06.2014
comment
На самом деле вам не нужно перезагружаться, чтобы новый лимит вступил в силу. Суть редактирования файла /etc/pam.d/common-session заключается в том, что создание любого нового сеанса приведет к обработке файлов ограничений. - person Christopher Smith; 20.11.2014
comment
Эта процедура работает. Никакой перезагрузки не требуется. Просто выйдите из системы и войдите снова, чтобы увидеть результат. - person Bill Butler; 26.03.2015
comment
В случае neo4j-service или любой другой службы, использующей start-stop-daemon, уловка common-session-* не сработает, потому что start-stop-daemon вообще не использует PAM. Нет другого способа, кроме добавления явного ulimit -n xxx вызова где-нибудь в сценарии инициализации перед запуском службы. - person David Ammouial; 06.10.2015
comment
Прекрасно работал на Ubuntu 16.04.1 LTS - person Andrew T Finnell; 09.08.2016

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

person minhas23    schedule 17.07.2014
comment
Убедитесь, что вы вышли из системы и вернулись, чтобы он мог отражать ваши изменения, если вы не проверяете это с помощью пользователя root, для ubuntu вы можете сделать это с помощью gnome-session-quit - person Mayank Saxena; 17.06.2015
comment
/ proc / sys / fs / file-max НЕ ЯВЛЯЕТСЯ МАКСИМАЛЬНЫМ nofile, разрешенным системой !!! Например, в моей системе по умолчанию установлено значение 1528702. Установка этого значения для мягких / жестких ограничений в limits.conf вообще не позволяет пользователю увеличивать пределы с 1024. Мне пришлось установить limits.conf на что-то более консервативное, например 256 * 1024 = 262144, и, наконец, ulimit -a показывает то же самое для обычного пользователя. - person sabujp; 28.04.2017

У меня была такая же проблема, и я заставил ее работать, добавив записи в /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's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

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

На данный момент работают 2 подхода:

  1. добавьте настройку ulimit в сценарий инициализации непосредственно перед start-stop-daemon.
  2. подстановочный знак или более подробные настройки ulimit в файле безопасности.
person Brett    schedule 03.10.2014
comment
когда я делаю то же самое (начиная с whoami), я сначала получаю 1024, затем 65536 (для root), затем 65536 для пользователя. Но первым был тот же пользователь. У тебя есть объяснение этому, я сбит с толку - person Danielson; 23.10.2015
comment
Звучит странно. Как вы переключаетесь с пользователя на root и обратно на пользователя? Вы полностью вышли из системы после установки файла? сначала вы можете находиться в кешированном сеансе, а затем использовать новый сеанс, в зависимости от того, как вы вернетесь к пользователю. - person Brett; 23.10.2015
comment
Я все время перезагружаюсь, на всякий случай. Также попробовал установить /etc/sysctl.conf - ›fs.file-max = 1000000 должен исправить это глобально для всех пользователей, также безрезультатно. Как будто процесс меня игнорирует. Я переключаюсь с пользователя на пользователя root на пользователя, как вы описали, с пользователя root - ›пользователя, использующего su - my_user_name. Это означает, что система знает, что она должна использовать для этого пользователя, но не ... - person Danielson; 23.10.2015

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

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

person abligh    schedule 02.02.2014
comment
Я начинаю neo4j с neo4j start. Где я могу найти для него сценарий инициализации? - person theharshest; 03.02.2014
comment
попробуйте ввести ulimit -n 40000 перед neo4j start - person abligh; 03.02.2014

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

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

sudo sysctl -w fs.inotify.max_user_watches=100000

Изменить

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

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p
person Layke    schedule 10.07.2015

Попробуйте запустить эту команду, она создаст *_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 он будет установлен для * пользователей.

person Mahattam    schedule 29.07.2015
comment
Простой и полезный ответ. - person sumanth; 22.07.2017

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 покажут мягкий предел (до жесткого, конечно)

person jorfus    schedule 12.09.2015

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

echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/
person bigkahunaburger    schedule 23.07.2016

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

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

    Начало настройки ограничения для пользователя веб-сайта

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  4. Сделайте запись ниже для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ

    Конфигурация Ulimit для каждого пользователя

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

person Sandeep kr gupta    schedule 09.09.2015