Как увеличить лимит Открытых файлов в 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 и добавьте следующую строку:
После чего примените эти изменения командой
Этим вы установили лимиты для всей системы. Лимиты для конкретного пользователя или сессии не могут превышать лимитов системы.
Вики IT-KB
Пошаговые руководства, шпаргалки, полезные ссылки.
Инструменты пользователя
Инструменты сайта
Боковая панель
Содержание
Как проверить все открытые файлы пользователем или процессом в Linux
В некоторых ситуациях на Linux могут возникать ошибки, связанные с превышением лимита использования файловых дескрипторов. Эти лимиты накладываются как самим ядром Linux, так и его программными модулями, например PAM.
Лимит ядра Linux
Узнать текущее значение максимального количества файловых дескрипторов, определяемое ядром Linux можно командой:
Этот лимит может быть изменён без перезагрузки системы (начинает действовать сразу и действует до перезагрузки):
Чтобы требуемое значение использовалось постоянно, то есть действовало и после перезагрузки, его необходимо определить в конфиг.файле /etc/sysclt.conf :
Методика подсчёта открытых файлов
Для получения информации о количестве всех открытых файлов всеми процессами в Linux некоторые «знатоки» предлагают использовать команду типа
Однако такая команда показывает гораздо большее значение, чем всего открыто файлов в системе на данный момент на самом деле. Это связано с тем, что по несколько раз в подсчёт попадают одни и теже открытые файлы, используемые разными процессами.
Поэтому проще для получения общего числа открытых файлов использовать данные ядра Linux
Первое число — общее количество занятых/используемых на данный момент времени файловых дескрипторов.
Второе число — количество выделенных процессам, но не используемых в данный момент дескрипторов.
Третье число — максимальное количество открытых дескрипторов
Примеры получения данных
Получить список TOP-20 процессов с самым большим количеством открытых файловых дескрипторов:
Подсчитать количество открытых файлов в разрезе процессов (в первой колонке будет выведен PID процесса, во второй количество открытых файлов этим процессом):
Посмотреть открытые файловые дескрипторы во всех процессах для отдельно взятого пользователя, например «apache»
Подсчитать количество открытых файлов в каждом процессе для отдельно взятого пользователя:
Тоже самое, только в реальном режиме времени:
Посмотреть открыте файловые дескриптры для отдельно взятого процесса (по PID процесса):
Подсчитать количество файловых дескриптров для отдельно взятого процесса:
Дополнительные источники информации:
Проверено на следующих конфигурациях:
Автор первичной редакции:
Алексей Максимов
Время публикации: 09.06.2018 11:18
Как увеличить количество открытых файлов в 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:
Спасибо за уделенное время на прочтение статьи!
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Денис Туляков — блог о том, что мне интересно
Заметки о *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