Это происходит на Ubuntu Release 12.04 (точный) 64-разрядный Kernel Linux 3.2.0-25-virtual
Я пытаюсь увеличить количество открытых файлов, разрешенных для пользователя. Это для моего приложения ecplise java, где текущий предел 1024 не достаточен.
Согласно сообщениям, которые я нашел до сих пор, я должен был бы поместить строки в
/etc/security/limits.conf следующим образом:
soft nofile 4096
hard nofile 4096
, чтобы увеличить количество открытых файлов, разрешенных для всех пользователей.
Но это не работает для меня, и Я думаю, что проблема не связана с этим файлом.
Для всех пользователей ограничение по умолчанию равно 1024, независимо от того, что находится в /etc/security/limits.conf (я перезагрузился после изменения этого файла )
$ ulimit -n
1024
Теперь, несмотря на записи в файле /etc/security/limits.conf, я не могу этого увеличить,
$ ulimit -n 2048
-bash: ulimit: открыть файлы: не может изменить предел: операция не разрешена. Странная часть заключается в том, что я могу изменить предел вниз, но не могу изменить его вверх - даже вернуться к числу, которое ниже исходного предела;
$ ulimit -n 800
$ ulimit -n
800
$ ulimit -n 900
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Как root, я могу изменить этот предел на все, что захочу, вверх или вниз. Это даже не похоже на возможный общесистемный предел в / proc / sys / fs / file-max
# cat /proc/sys/fs/file-max
188897
# ulimit -n 188898
# ulimit -n
188898
Но даже я заставляю eclipse работать под управлением root, мое приложение все еще падает из-за исключения «слишком много открытых файлов»!
До сих пор я не нашел способа увеличить ограничение открытых файлов для пользователя без полномочий root.
Как я должен правильно это делать? Я посмотрел несколько других сообщений, но не повезло!
Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:
su USER --shell /bin/bash --command "ulimit -n"
, чтобы проверить, действуют ли ваши настройки для этого конкретного пользователя или нет.
Команда ulimit по умолчанию изменяет жесткие пределы, которые вы (пользователь) можете понизить, но не можете повысить.
Используйте параметр -S, чтобы изменить предел SOFT, который может варьироваться от 0- {HARD}.
Я фактически использовал псевдоним ulimit до ulimit -S, поэтому он по умолчанию все время имеет мягкие ограничения.
alias ulimit='ulimit -S'
Что касается вашей проблемы , вы не видите столбец в своих записях в /etc/security/limits.conf.
Должны быть четыре столбца, но в вашем примере отсутствует первый.
* soft nofile 4096
* hard nofile 4096
Первая колонка описывает ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять пределы для -S , вы должны явно ввести «root» вместо «*».
Вам также нужно отредактировать /etc/pam.d/common-session* и добавить следующую строку в конец:
session required pam_limits.so
У меня проблемы с работой.
Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.
sudo sysctl -w fs.inotify.max_user_watches=100000
Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:
su USER --shell /bin/bash --command "ulimit -n"
, чтобы проверить, действуют ли ваши настройки для этого конкретного пользователя или нет.
Команда ulimit по умолчанию изменяет жесткие пределы, которые вы (пользователь) можете понизить, но не можете повысить.
Используйте параметр -S, чтобы изменить предел SOFT, который может варьироваться от 0- {HARD}.
Я фактически использовал псевдоним ulimit до ulimit -S, поэтому он по умолчанию все время имеет мягкие ограничения.
alias ulimit='ulimit -S'
Что касается вашей проблемы , вы не видите столбец в своих записях в /etc/security/limits.conf.
Должны быть четыре столбца, но в вашем примере отсутствует первый.
* soft nofile 4096
* hard nofile 4096
Первая колонка описывает ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять пределы для -S , вы должны явно ввести «root» вместо «*».
Вам также нужно отредактировать /etc/pam.d/common-session* и добавить следующую строку в конец:
session required pam_limits.so
У меня проблемы с работой.
Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.
sudo sysctl -w fs.inotify.max_user_watches=100000
Команда ulimit
по умолчанию изменяет пределы HARD, которые вы (пользователь) можете понизить, но не можете повышать.
Используйте параметр -S для изменения ПЛК SOFT, который может варьироваться от 0 - { HARD }.
Я на самом деле был псевдонимом ulimit
до ulimit -S
, поэтому он по умолчанию постоянно использует мягкие пределы.
alias ulimit='ulimit -S'
Что касается вашей проблемы, вам не хватает столбца в ваших записях в /etc/security/limits.conf
.
Должны быть четыре столбца, но в вашем примере отсутствует первый.
* soft nofile 4096
* hard nofile 4096
В первом столбце описывается ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Чтобы поднять ограничения для root, вы должны явно ввести «root» вместо «*».
Вам также нужно отредактировать /etc/pam.d/common-session*
и добавить следующую строку в конец:
session required pam_limits.so