Как мне увеличить лимит открытых файлов для пользователя, не являющегося пользователем root?

Это происходит в Ubuntu версии 12.04 (точная) 64-разрядное ядро Linux 3.2.0-25-virtual

Я пытаюсь увеличить количество открытых файлов, разрешенных для пользователя. Это для моего приложения eclipse java, где текущего ограничения в 1024 недостаточно.

Согласно сообщениям, которые я нашел до сих пор, я должен быть в состоянии поместить строки в

/etc/security/limits.conf примерно так:

soft nofile 4096hard nofile 4096

чтобы увеличить количество открытых файлов, разрешенных для всех пользователей.

Но у меня это не работает, и я думаю, что проблема не связана с этим файлом.

Для всех пользователей ограничение по умолчанию равно 1024, независимо от того, что находится в /etc/security/limits.conf (я перезагрузился после изменения этого файла)

$ ulimit -n1024

Теперь, несмотря на записи в / etc /security /limits.conf, я не могу увеличить это:

$ ulimit -n 2048

-bash: ограничение: открытые файлы: невозможно изменить ограничение: Операция не разрешена Странная часть заключается в том, что я могу изменить ограничение вниз, но не может изменить его в сторону увеличения - даже для того , чтобы вернуться к числу , которое ниже первоначального предела:

$ ulimit -n 800$ ulimit -n800$ ulimit -n 900-bash: ulimit: open files: cannot modify limit: Operation not permitted

Как root, я могу изменить это ограничение на все, что захочу, вверх или вниз. Похоже, его даже не волнует якобы общесистемное ограничение в /proc /sys /fs /file-max

# cat /proc/sys/fs/file-max188897# ulimit -n 188898# ulimit -n 188898

Но даже если я запускаю eclipse от имени root, мое приложение все равно выходит из строя из-за исключения "Слишком много открытых файлов"!

До сих пор я не нашел никакого способа увеличить лимит открытых файлов для пользователя, не являющегося root.

Как я должен правильно это сделать? Я просмотрел несколько других сообщений, но безуспешно!

То ulimit команда по умолчанию изменяет ЖЕСТКИЕ ограничения, которые вы (пользователь) можете снизить, но не можете повысить.

Используйте - С возможность изменить мягкий предел, который может варьироваться от 0 до{трудный}.

Я на самом деле использовал псевдоним ulimit к ulimit -S, поэтому по умолчанию все время используются мягкие ограничения.

alias ulimit='ulimit -S'

Что касается вашей проблемы, вам не хватает столбца в ваших записях в /etc/security/limits.conf.

Там должно быть ЧЕТЫРЕ столбца, но в вашем примере первый отсутствует.

* soft nofile 4096* hard nofile 4096

В первой колонке описывается, на КОГО распространяется ограничение. '*' - это подстановочный знак, означающий всех пользователей. Чтобы повысить лимиты для корень, вы должны явно ввести "root" вместо "*".

Вам также необходимо отредактировать /etc/pam.d/common-session* и добавьте следующую строку в конец:

session required pam_limits.so

Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:

su USER --shell /bin/bash --command "ulimit -n"

чтобы проверить, работают ли ваши настройки для этого конкретного пользователя или нет.

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

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

sudo sysctl -w fs.inotify.max_user_watches=100000
ulimit -S -n 4096

Это должно увеличить ваш мягкий лимит для открытых файлов (-n) до 4096.

Также обратите внимание, что после редактирования файла “/etc/security/limits.conf” вам, возможно, придется выйти из системы, а затем снова войти в систему, прежде чем вы сможете использовать новое максимальное ограничение. Я сделал это и был сбит с толку тем, что “ulimit -Hs” все еще показывал 1000, когда я только что поднял его до 1000000! Затем я вышел из системы и снова вошел в систему, и ulimit показал новую сумму.

Для сеанса графического интерфейса, который вы также можете найти важным (Ubuntu 16+) эта тема.