Як збільшити максимальну межу відкритості файлів (ulimit) Neo4j в Ubuntu?


78

В даний час ulimit -nпоказує 10000. Я хочу збільшити його до 40000. Я відредагував "/etc/sysctl.conf" і поставив fs.file-max=40000. Я також редагував /etc/security/limits.confта оновлював тверді та м'які значення. Але все-таки обмежені шоу 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видає максимальну кількість відкритих файлів, досягнуту помилкою.


Ви правильно зробили, просто перезавантажте систему, і все запрацює:sudo ulimit -n 40000
0x90 02

@ 0x90 Я перезавантажив систему. Але навіть тоді це не змінюється.
найсуворіший

6
Будучи специфічним для Ubuntu, він, ймовірно, фактично належить askubuntu.com; подібне запитання тут: askubuntu.com/questions/162229/…
Ламбарт,


після додавання до /etc/security/limits.conf, яку службу слід перезапустити, щоб зміни набули чинності?
Ashish Karpe

Відповіді:


8

Я використовую Debian, але це рішення має нормально працювати з Ubuntu.
Ви повинні додати рядок у скрипті служби neo4j .
Ось що я зробив:

nano /etc/init.d/neo4j-service
Додайте « ulimit –n 40000 » безпосередньо перед рядком start-stop-daemon у розділі 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.
Ламбарт,

В Ubuntu 14.04 справді є /etc/init.d/neo4j-serviceфайл, і Мартін Ларієр має рацію, вставляючи uname -n 40000вирішує проблему. Я не знаю відмінностей між Ubuntu Server та Ubuntu, тому, можливо, ти теж маєш рацію, я додаю це лише для того, щоб пояснити, що написане Мартіном вирішує проблему з простим Ubuntu 14.04.
Grégoire C

3
@Lambart, у випадку neo4j-сервісу, common-session-*фокус не спрацює, оскільки neo4j-сервіс базується на PAM start-stop-daemonі start-stop-daemonвзагалі не використовує його. Єдиним рішенням є насправді додати явний ulimit -n xxxвиклик у скрипт ініціювання.
Девід Аммуял

2
Це не рішення, це банда.
Тім Вахтер,

83

Те, що ви робите, не буде працювати для кореневого користувача. Можливо, ви використовуєте свої сервіси від імені користувача, і, отже, ви не бачите змін.

Щоб збільшити обмеження для користувача root, вам слід замінити на *root. *не застосовується до кореневого користувача. Відпочинок такий же, як і ви. Я перецитую його тут.

Додайте до файлу такі рядки: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

А потім додайте наступний рядок у файл: /etc/pam.d/common-session

session required pam_limits.so

Це оновить обмеження для користувача root. Як зазначалося в коментарях, можливо, вам навіть не доведеться перезавантажуватись, щоб побачити зміни.


2
Вам фактично не потрібно перезавантажуватися, щоб новий ліміт набув чинності. Суть редагування файлу /etc/pam.d/common-session полягає в тому, що створення будь-якого нового сеансу призведе до обробки файлів обмежень.
Крістофер Сміт

1
Ця процедура працює. Перезавантаження не потрібно. Просто вийдіть і увійдіть знову, щоб побачити результат.
Білл Батлер

2
У випадку служби neo4j або будь-якої іншої служби, яка використовує start-stop-daemon, common-session-*фокус не спрацює, оскільки start-stop-daemonвзагалі не використовує PAM. Немає іншого способу, як додати явний ulimit -n xxxвиклик десь у скрипті init перед запуском служби.
David Ammouial

3
Чудово працював на Ubuntu 16.04.1 LTS
Ендрю Т Фіннелл

63

1) Перевірте file-maxліміт sysctl :

$ 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
Переконайтеся, що ви вийшли і знову ввійшли, щоб він міг відображати ваші зміни, якщо ви не перевіряєте це з кореневим користувачем, для ubuntu ви можете зробити це доgnome-session-quit
Mayank Saxena

/ proc / sys / fs / file-max - НЕ МАКСИМАЛЬНИЙ nofile, дозволений системою !!! Наприклад, у моїй системі за замовчуванням встановлено значення 1528702. Встановлення цього значення для м'яких / жорстких обмежень у limit.conf взагалі не дозволяє користувачеві збільшити обмеження з 1024. Мені довелося встановити limit.conf для чогось набагато більш консервативного, наприклад 256 * 1024 = 262144, і нарешті ulimit -a показує те ж саме для звичайного користувача.
sabujp

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's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

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

На даний момент працюють 2 підходи:

  1. додати граничне налаштування до скрипта init, безпосередньо перед запуском-зупинкою-демоном.
  2. підстановочний знак або більш широкі обмежувальні налаштування у файлі захисту.

коли я роблю те, що ти робив (починаючи з whoami), я спочатку отримую 1024, потім 65536 (для кореневої системи), потім 65536 для користувача. Але першим був той самий користувач. У вас є пояснення цьому, я збентежений
Деніелсон,

Це звучить химерно. Як переключитися з користувача на кореня і назад на користувача? Ви повністю вийшли з системи після налаштування файлу? Ви можете бути в кешованому сеансі спочатку, а потім використовувати новий сеанс залежно від того, як Ви повернетесь до користувача.
Бретт

Я продовжую перезавантажуватись, щоб бути впевненим. Також спробував налаштування /etc/sysctl.conf-> fs.file-max = 1000000повинен виправити це глобально для всіх користувачів, також результату немає. Це як процес мене ігнорує. Я переходжу від користувача до кореня до користувача, як ви описали, від root -> користувач, що використовує su - my_user_name. Що вказує на те, що система знає, що вона повинна використовувати для цього користувача, але ні ...
Даніельсон,

2

Ви можете змінити скрипт ініціалізації, neo4jщоб зробити a ulimit -n 40000перед запуском neo4j.

Однак я не можу не відчути, що ти гавкаєш не те дерево. Чи neo4jзаконно потрібно більше 10000 дескрипторів відкритих файлів? Це дуже схоже на помилку neo4jабо спосіб використання. Я спробував би вирішити це.


Я починаю neo4jвикористовувати neo4j start. Де я можу знайти скрипт ініціалізації для нього?
найсуворіше

спробуйте набирати текст ulimit -n 40000ранішеneo4j start
abligh

2

У мене багато проблем з тим, щоб це працювало.

Використання наведеного нижче дозволяє вам оновити його незалежно від дозволу користувача.

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

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він встановить для * користувачів


Легка та корисна відповідь.
сумант

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будуть показувати м'яку межу (звичайно, до жорсткої межі)



1

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

  1. Вхід за корінням
  2. vi безпека / обмеження.conf
  3. Зробити нижче

    Запуск конфігурації 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
    
  4. Зробіть нижчий запис для ВСІХ КОРИСТУВАЧІВ

    Максимальна конфігурація для кожного користувача

    *   soft   nofile    8192
    *   hard   nofile    8192
    *   soft   nproc    4096
    *   hard   nproc    8192
    *   soft   core    unlimited
    *   hard   core    unlimited
    
  5. Після модифікації файлу користувачеві потрібно вийти з системи та ввійти ще раз, щоб побачити нові значення.

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