Вопрос или проблема
Я следовал этому ответу: https://askubuntu.com/a/162230
Я отредактировал limits.conf, теперь он выглядит так:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc Unlimited
root soft nofile 65536
root hard nofile 65536
Также я отредактировал файлы “/etc/pam.d/common-session” и “/etc/pam.d/common-session-noninteractive”. Добавил строку в конце обоих файлов:
session required pam_limits.so
И я перезагрузил Ubuntu, но “prlimit” все еще показывает
NOFILE ... 1024 65536 files
ulimit -n
также показывает 1024
Как я могу изменить это навсегда?
Самый простой способ изменить это – добавить ulimit -S -n 65536
в файл инициализации вашей оболочки (.bashrc
возможно).
Я думаю, это ошибка.
Я также не могу изменить эти значения, даже если укажу для systemd LimitNOFILE
как пользовательскую настройку или как системную настройку, зависимые службы падают из-за лимита nofile в 1024, независимо от настроек в limits…
Чтобы обойти это, я принудительно установил лимит для пользователя root на 65535, используя ulimit… Это нужно применять при каждой загрузке.
Ответ или решение
На Ubuntu 22.04, если изменения в файле limits.conf
не приводят к увеличению количества дескрипторов файлов, можно предпринять несколько шагов для решения проблемы. Следует учитывать, что настройки по умолчанию системы и пользователя могут пересекаться. Вот подробный список шагов, которые необходимо выполнить:
-
Правильное редактирование файла
limits.conf
:
Убедитесь, что изменения в файле/etc/security/limits.conf
выполнены корректно. Должно быть добавлено следующее:* soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc Unlimited
Также проверьте, что для пользователя
root
указаны аналогичные строки, как у вас уже указано. -
Редактирование файлов PAM:
Важно, чтобы вы добавили строку:session required pam_limits.so
в файлы
/etc/pam.d/common-session
и/etc/pam.d/common-session-noninteractive
, как вы уже сделали. Убедитесь, что добавленная строка находится в самом конце файлов. -
Изменения для systemd:
Если вы запускаете службы через systemd (что актуально для большинства современных дистрибутивов Linux), следует задать лимиты на уровне unit-файла системных служб. Для этого выполните следующие действия:-
Найдите нужный unit-файл, который хотите изменить (например, для службы
myservice.service
, которая находится в/etc/systemd/system/myservice.service
или в/lib/systemd/system/myservice.service
). -
Откройте его для редактирования и добавьте следующие строки под секцией
[Service]
:LimitNOFILE=65536
-
После внесения изменений выполните команду для перезагрузки конфигурации systemd:
sudo systemctl daemon-reload
-
Перезапустите службу, чтобы изменения вступили в силу:
sudo systemctl restart myservice
-
-
Перезагрузка системы:
После внесения всех изменений обязательно перезагрузите систему, чтобы они вступили в силу. Вы можете проверить, изменились ли лимиты командой:ulimit -n
или
prlimit --pid $$ --nofile
Вы должны увидеть, что лимиты увеличились до 65536.
-
Дополнительное изменение в конфигурации пользователя:
Если вам необходимо изменить лимит на уровне пользователя, вы также можете добавить строкуulimit -n 65536
в файл~/.bashrc
или~/.profile
. После этого не забудьте выполнить:source ~/.bashrc
Или перезагрузите терминал.
-
Проверка и устранение возможных ошибок:
Если после выполнения всех шагов лимиты все еще не изменяются, проверьте наличие других конфигурационных файлов или параметров, которые могут переопределять настройки (например, в файлах/etc/systemd/system.conf
и/etc/systemd/user.conf
). Убедитесь, что везде установлены правильные значения.
Следуя этим рекомендациям, вы сможете успешно изменить количество доступных дескрипторов файлов на вашей системе Ubuntu 22.04.