Как увеличить лимит Открытых файлов в Ubuntu/Debian/CentOS/Fedora
Периодически при работе сервера вы можете столкнуться с ошибкой » Too many open files » в Linux системах. Чаще всего это бывает на нагруженных серверах. Это значит, что сервер достиг лимита на количество открытых файлов. Этот лимит может быть указан для конкретного пользователя или сессии.
В этой статье я расскажу какие бывают лимиты (а их два вида) и как их увеличить.
- Жесткий лимит — максимальное количество открытых файлов для пользователя или сессии. Устанавливается только администратором/root
- Мягкий лимит — текущее эффективное значение для пользователя или сессии. Может быть изменен самим пользователем, но значение не может превышать жесткого лимита.
Проверка текущих лимитов
Для контроля лимита ресурсов в Linux имеется утилита ulimit .
Получим текущее значение лимитов:
В результате выполнения команды вы увидите список текущих лимитов, а именно тип лимита и его значение.
Чтобы узнать жесткий и мягкие лимиты, используйте следующие команды:
ulimit -Sn # Мягкий лимит
ulimit -Hn # Жесткий лимит
Увеличение лимита для текущей сесии
Большинство операционных систем позволяют изменить лимит открытых файлов для текущей сессии с помощью команды ulimit -n :
Увеличение лимита для пользователя
Вы также можете изменить лимиты для каждого пользователя в отдельности. Для этого нужно отредактировать файл /etc/security/limits.conf в удобном вам редакторе, в моем случае это будет vim
и добавить в него следующие строки:
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
max soft nproc 20000
max hard nproc 20000
max soft nofile 20000
max hard nofile 20000
Это значит, что для пользователя » max » будут установлены лимиты в 20000 , а для всех остальных пользователей — 65535 . Измените эти значение по своему усмотрению.
Изменение лимита для всей системы
Вы также можете изменить лимиты для всех пользователей системы, для этого нужно отредактировать параметры sysctl . Откройте в редакторе файл /etc/sysctl.conf и добавьте следующую строку:
После чего примените эти изменения командой
Этим вы установили лимиты для всей системы. Лимиты для конкретного пользователя или сессии не могут превышать лимитов системы.
Увеличиваем лимит открытых файловых дескрипторов
Иногда при подготовке проектов необходимо увеличить лимит открытых файлов (например для apache2). Вот как это можно сделать Debian системе:
1. Поправим /etc/security/limits.conf, добавив следующие строки:
В данном случае мы увеличиваем софт лимит для юзера www-data (под которым запускается apache в Debian) до 32000, а жесткий лимит до 40000 открытых файлов.
2. Затем нам необходимо прописать перегрузку лимита при перелогине пользователя. Для этого правим /etc/pam.d/common-session и приводим его к такому виду:
После этого можно проверить как подхватились наши лимиты:
Теперь рестартнем апач и все, будем спокойны, что он не завалится при попытке открыть много файлов
P.S. Если необходимо увеличить лимит для всех юзеров, то необходимо в /etc/security/limits.conf прописать это:
- ubuntu/limitshowto.txt
- Последние изменения: 2017/05/09 15:34
- (внешнее изменение)
Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:
CC Attribution-Noncommercial-Share Alike 4.0 International
Как увеличить количество открытых файлов в Linux
В Linux вы можете изменить лимит открытых файлов. Это можно сделать путем использования команды ulimit. Она дает возможность контролировать ресурсы, доступные для оболочки или запущенного ею процесса.
В этом кратком руководстве мы покажем вам, как проверить текущий лимит открытых файлов и их описание. Для этого вам потребуется получить root-доступ к вашей системе.
Давайте посмотрим, как мы можем узнать лимит открытых файловых дескрипторов в вашей системе Linux.
Как найти количество открытых файлов в Linux
Значение сохраняется в
Номер, который вы увидели, показывает количество файлов, которые пользователь мог открыть для каждого сеанса входа. Результат может отличаться в зависимости от вашей системы.
Например, на сервере CentOS ограничение было установлено на 818354
Если вы хотите увидеть Hard и Soft лимит, используйте следующие команды:
Проверка Hard лимит в Linux
Проверка Soft лимит в Linux
Чтобы просмотреть значения Hard и Soft для разных пользователей, переключите пользователя с «su» на пользователя, ограничения которого вы хотите проверить.Например:
Как проверить количество системных дескрипторов файлов в Linux
На серверах, некоторые из ваших приложений могут потребовать более высокий лимит для открытых дескрипторов файлов. Хорошим примером этого являются службы MySQL / MariaDB или веб-сервер Apache.
Вы можете увеличить лимит открытых файлов в Linux, отредактировав опцию ядра fs.file-max. Для этого используйте утилиту sysctl.
Sysctl используется для настройки параметров ядра.
Например, чтобы увеличить ограничение на количество открых файла до 500000, вы можете использовать следующую команду:
Вы можете проверить текущее значение для количества открытых файлов с помощью следующей команды:
С помощью указанной команды изменения, которые вы внесли, будут оставаться активными только до следующей перезагрузки. Если вы хотите применить их на постоянной основе, вам придется отредактировать следующий файл:
Добавьте следующую команду:
Конечно, вы можете изменить число в соответствии с вашими потребностями. Чтобы снова проверить изменения, используйте:
Чтобы изменения вступили в силу, пользователям необходимо будет выйти из системы и снова войти в систему. Если вы хотите немедленно применить ограничения, вы можете использовать следующую команду:
Установка количества открытых файлов для пользователя в Linux
Вышеприведенные примеры показали, как установить ограничения, но вы можете установить лимит для каждого пользователя. Для этой цели, с правами пользователя root, вам необходимо отредактировать следующий файл:
Если вы администратор Linux, предлагаем Вам ознакомиться с этим файлом. Прочитайте все комментарии в нем, поскольку он обеспечивает гибкость в плане управления системными ресурсами путем установки лимита пользователям на разных уровнях.
Команды, которые вы должны добавить, имеют следующие параметры:
Вот пример установки Soft и Hard лимитов для пользователя dimon:
Спасибо за уделенное время на прочтение статьи!
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Лимит на количество открытых дескрипторов
Пишу демон на go, используя go-daemon. Вопрос вот в чем:
Какой лимит, по умолчанию, на количество открытых дескрипторов файла в go? Как его менять? И есть ли общепринятые рекомендации по их количеству?
1 ответ 1
Начать стоит с проверки ulimit -a и ulimit -aH в shell’е перед запуском вашего демона. Это быстро покажет текущие «мягкие» и (второй вызов) «жесткие» ограничения. При помощи ulimit можно открутить мягкие ограничения до пределов жестких. Следует понимать, что ulimit меняет только текущие лимиты, для шелла и всех программ, запущенных в этом шелле, поэтому после завершения сессии или даже в другом окне терминала значения останутся прежними.
Следующее место задания ограничений, на этот раз постоянных — это /etc/security/limits.conf и каталог /etc/security/limits.d/ , ограничение называется nofile . Редактировать (а, иногда, и смотреть) эти файлы может только суперпользователь («root»). Там задаются ограничения на отдельных пользователей или группы, применяемые на всю сессию данного пользователя, или всех пользователей определенной группы.
И наконец, есть «системное ограничение», задаваемое через sysctl — это fs.nr_open :
/sbin/sysctl -n fs.nr_open
ему же соответствует файл /proc/sys/fs/nr_open
«Программно» манипулирование лимитами текущего процесса в пределах жестких ограничений, заданных на сессию, осуществляется через вызовы getrlimit/setrlimit, которые можно звать из Go, используя FFI (см. примеры, н-р, здесь)
Денис Туляков — блог о том, что мне интересно
Заметки о *nix системах о железках о DB и даже о windows, возможно, ещё что то .
Страницы
2015-02-06
Количество открытых файлов, сокетов
Достаточно часто возникают ошибки связанные с тем, что превышен лимит открытых файлов или общего количества файлов.
Такие лимиты бывают нескольких видов:
— накладываемые ядром
— накладываемые PAM
— накладываются самими программами
1) Ограничения накладываемые ядром:
Просмотр текущего значения максимального количества дескрипторов открытых файлов:
cat /proc/sys/fs/file-max
Может быть легко изменено «на лету» (останется до перезагрузки компьютера):
echo «104854» > /proc/sys/fs/file-max
Если хочется чтобы новое значение использовалось постоянно, его необходимо внести в /etc/sysclt.conf:
fs.file-max=104854
Посмотреть текущее количество дескрипторов открытых файлов:
cat /proc/sys/fs/file-nr
3391 969 104854
| | |
| | |
| | максимальное число открытых файловых дескрипторов
| число занятых(выделенных), но не используемых дескрпиторов
общее число занятых дескрипторов
2) Ограничения накладываемые PAM
Если на машине используются PAM (подключаемые модули авторизации), можно столкнуться с ограничениями
на количество открытых файлов для пользователя (bind, mysql).
Ограничения задаются в /etc/security/limits.conf.
Файл хорошо документирован, есть man-страница limits.conf (5).
Есть 2 типа ограничений:
soft и hard мягкий и жесткий лимита соответственно. soft может быть изменен в самой программе. hard может быть изменен только суперпользователем. Ограничивать можно»
a. пользователя —
б. группу — @
в. всех — *
Общее количество открытых файлов можно также можно посмотреть с помощью комманды lsof:
lsof | wc -l
Эта же комманда позволяет посмотреть файлы открытые конкретными приложениями:
lsof | grep 29384 (где 29384 — это PID необходимого приложения).
Менее ресурсоёмкая команда, для этой же цели:
ls -l /proc/29384/fd/
Для работы с Unix-сокетами также требуется получение дескриптора файла, поэтому приложения работающие с UNIX-сокетами могут также попадать под ограничение на количество файлов. Для просмотра сокетов можно использовать Perl-скрипт: socklist (8), который входит в состав пакета procinfo (название пакета в Debian, RHEL) или комманду netstat (8): netstat -uxp