Linux: исправить ошибку «Слишком много открытых файлов»
В этом руководстве объясняется, как решить ошибку «Слишком много открытых файлов» в Linux.
Прочитав эту статью, вы поймете причину ошибки, которую вы получаете, и узнаете, как ее исправить. Вы не только научитесь исправлять ошибку, но и узнаете о других важных аспектах файловых процессов вашей ОС Linux.
Значение ошибки «Слишком много открытых файлов»
Когда пользователь выполняет процесс, у процесса есть связанные файлы, содержащие информацию об использовании файлов. Например, файловые дескрипторы могут сообщать ядру, как получить доступ к файлу или как обращаться с ним к другому ресурсу. Например, когда мы используем канал для перенаправления процесса на другой.
По умолчанию каждый исполняемый процесс Linux имеет как минимум 3 связанных файла с именами Файловые дескрипторы: STDIN, STDOUT и STDERR. Их функции показаны в таблице ниже.
File Descriptor | Number | Function |
STDIN | 0 | Refers to the keyboard input method |
STDOUT | 1 | Prints or redirects the output, refers to the screen |
STDERR | 2 | Prints or redirects errors, refers to the screen |
Существует ограничение на число файловых дескрипторов пользователей и процессов, которые могут выполняться одновременно. Когда предел достигнут и пользователь или процесс пытается открыть дополнительные файловые дескрипторы, мы получаем «Ошибка слишком много открытых файлов».
Таким образом, решение этой ошибки состоит в том, чтобы увеличить лимит файловых дескрипторов, которые может открыть пользователь или процесс.
Исправление ошибки Linux «Слишком много открытых файлов»
Чтобы проверить лимит файлов дескрипторов для текущего сеанса, выполните команду, показанную ниже.
Как вы можете видеть выше, ограничение составляет 1024.
Теперь давайте проверим ограничение пользователя, выполнив следующую команду:
Чтобы узнать количество текущих файлов, вы можете использовать команду, показанную на скриншоте ниже.
Команда, показанная ниже, может использоваться для увеличения лимита файлов дескрипторов для устранения этой ошибки. Однако это может не сработать, если достигнут предел, указанный в конфигурационных файлах.
Как видите, система не позволяет нам увеличивать лимит. В таком случае нам нужно отредактировать пару файлов.
В первом файле для редактирования вы увидите два типа ограничений: жесткие и мягкие ограничения:
Жесткий предел представляет собой максимальный предел, разрешенный для мягкого ограничения. Для изменения жесткого ограничения требуются права.
С другой стороны, мягкое ограничение используется системой для ограничения всех системных ресурсов для выполнения процессов. Мягкое ограничение не может быть больше жесткого ограничения.
Вы можете узнать как жесткие, так и мягкие ограничения с помощью команд, показанных на следующем снимке экрана, где ulimit -Sn показывает мягкое ограничение, а ulimit -Hn показывает жесткое ограничение.
Сначала откройте следующий файл с привилегиями:
Отредактируйте строки, показанные ниже, увеличив лимит. В моем случае я увеличиваю мягкое ограничение с 1024 до 2048. Здесь вы также можете изменить жесткое ограничение, если это необходимо.
Затем перезапустите daemon-reexec с помощью systemctl, как показано ниже.
Откройте новый терминал или перезапустите сеанс, чтобы убедиться, что изменения были внесены успешно, и попробуйте снова изменить ulimit, выполнив следующую команду, и измените ограничение на то, которое вы указали в /etc/security/limits.conf файл.
Как вы можете видеть выше, лимит был успешно обновлен.
Если это не сработало для вас, откройте следующий файл с привилегиями:
Найдите строку DefaultLimitNOFILE= и измените первое число перед двоеточием, увеличив лимит. В моем случае я увеличил его с 1024 до 2048. Затем закройте и выйдите из файла, сохранив изменения.
Также откройте следующий файл с привилегиями:
Найдите такую же строку и отредактируйте ее, повторив внесенные ранее изменения.
Снова перезапустите демон reexec с помощью systemctl.
Перезапустите сеанс и используйте следующую команду, заменив 2048 пределом, который вы хотите установить и настроить в файлах конфигурации:
Следующая команда возвращает лимит для всей системы:
Вы можете изменить системный лимит, используя следующую команду:
Чтобы сделать изменение постоянным, отредактируйте следующий файл с привилегиями:
Добавьте следующую строку, заменив
Перезапустите, чтобы применить новые изменения с помощью команды ниже.
Вот и все, после увеличения ulimit ошибка «Слишком много открытых файлов» должна быть исправлена.
Заключение
Эту ошибку может легко исправить любой пользователь Linux. Linux предлагает разные способы решения этой проблемы, не стесняйтесь попробовать все из них, чтобы избавиться от этой ошибки. Описанные выше шаги действительны для многих дистрибутивов Linux, но выполняются в дистрибутивах на основе Debian. Если вам интересно узнать об дескрипторах файлов, мы опубликовали специальную информацию по этой теме, которую вы можете прочитать на этом сайте. Дескрипторы файлов являются основным компонентом всех операционных систем.
Спасибо, что прочитали это руководство, объясняющее, как решить ошибку «Слишком много открытых файлов» в Linux. Продолжайте следить за нами, чтобы получать больше профессиональных статей по Linux.