Слишком много открытых файлов linux

Исправляем ошибку “Too many open files“ в Linux

Очень часто при работе на высоконагруженных Linux серверах могут возникать ошибки “too many open files». Это означает, что программа открыла слишком много файлов (читай файловых дескрипторов) и не может открыть новые. В Linux ограничения “max open file limit“ установлены по умолчанию для каждого процесса и пользователя, и они не слишком высокие.

В данной статье мы рассмотрим, как проверить текущие ограничения по количеству открытых файлов, как его изменить эту настройку для всего сервера, для отдельных сервисов и для сеанса.

Ошибка: Too many open files и лимиты на количество открытых файлов в Linux

Для начала разберемся, где мы можем наблюдать ошибку “too many open files“. Чаще всего эта ошибка встречается на серверах с установленным веб-серверов NGINX/httpd, сервером БД (MySQL/MariaDB/PostgreSQL), при чтении большого количества логов. Например, когда веб-серверу Nginx не хватает лимита для открытия файлов, вы получите ошибку:

Максимально количество файловых дескрипторов, которые могут быть открыты в вашей системе можно узнать так:

Ограничение на количество открытых файлов для текущего пользователя – 1024. Можно проверить так:

Есть два типа ограничений: Hard и Soft. Пользователь может изменить лимит для soft ограничения (но значение soft не может превышать hard). Hard ограничение можно изменить только от привилегированного пользователя.

Для вывода Soft -граничения выполните:

Для вывода Hard-ограничения:

Настройки лимитов ограничения на количество одновременно открытых файлов в Linux

Чтобы разрешить всем сервисам открывать большее количество файлов, можно изменить лимиты на уровне всей ОС Linux. Чтобы новые настройки работали постоянно и не сбрасывались при перезапуске сервера или сессии, нужно поправить файл /etc/security/limits.conf. Добавьте строки:

Ели вы используете Ubuntu, нужно прописать строку:

Данный параметр добавляет возможность загрузки ограничений при авторизации пользователя.

После изменений, перезапустите терминал и проверьте значение лимита max_open_files:

Увеличить лимита открытых файловых дескрипторов для отдельного сервиса

Вы можете изменить лимит на количество открытых файловых дескрипторов для конкретного сервиса, а не для всей системы. Рассмотрим на примере apache. Чтобы изменить значения, откройте настройки службы через systemctl: # systemctl edit httpd.service Добавьте необходимые лимиты, например:

После изменения, нужно обновить конфигурацию сервиса и перезапустить его:

# systemctl daemon-reload
# systemctl restart httpd.service

Чтобы проверить, изменились ли значения, нужно получить PID сервиса:

# systemctl status httpd.service

Например, вы определил PID сервиса 32724:

# cat /proc/32724/limits | grep «Max open files”

Так вы изменили значения Max open files для конкретного сервиса.

Увеличение максимального количества открытых файлов для Nginx и Apache

При изменении ограничения на количество открытых файлов для веб-сервера, нужно также поправить конфигурационный файл службы. Например, для Nginx в файле конфигурации /etc/nginx/nginx.conf, нужно прописать/изменить значение в директиве:

Читайте также:  Microsoft sql server compact windows 10

После чего выполнить рестарт Nginx.

Для apache, нужно создать директорию:

После этого создайте файл limit_nofile.conf:

И добавьте в него:

Не забудьте перезапустить сервис httpd.

Лимиты file-max для текущей сессии

Чтобы изменить лимиты на открытые файлы в рамках вашей сессии терминала, выполните команду:

При закрытии терминала и создания новой сессии, лимиты вернуться к начальным значениям, указанным в файле /etc/security/limits.conf.

Чтобы изменить общее значение в системе /proc/sys/fs/file-max, измените значение fs.file-max в /etc/sysctl.conf:

В данной статье мы разобрались, как решить проблему с недостаточным лимитом для открытых файловых дескрипторов в Linux и рассмотрели несколько вариантов изменения лимитов на сервере.

Источник

linux-notes.org

Несколько раз я сталкивался с ошибкой «Too many open files»(Слишком много открытых файлов) на сервере с высокой нагрузкой. Это означает, что сервер исчерпывает ресурс на максимальный предел открытых файлов (max open file limit). Теперь вопрос в том, как я могу увеличить лимиты открытых файлов на Linux? Да все очень просто, в своей статье «Увеличить Max Open File Limit в Unix/Linux» покажу как это выполняется.

Увеличить Max Open File Limit в Unix/Linux

Приведу команды на различные Unix/Linux ОС

Увеличить Max Open File Limit в Linux

Для начала проверим какой предел установлен в ОС:

Увеличиваем данный предел в Linux

Мы можем увеличить лимиты для открытых файлов:

-===ВРЕМЕННО===-

Если есть необходимость увеличить лимит временно (для тестирования, например), то можно это сделать так:

Вот еще один пример:

-===ПОСТОЯННО===-

Если есть необходимость увеличить лимит навсегда, то можно это сделать так:

Эти настройки будут сохраняться даже после перезагрузки системы. После добавления конфигурации в файл, выполните следующую команду, чтобы изменения вступили в силу:

Настройка лимитов для каждого пользователя

Проверка установленных лимитов

Используйте следующую команду, чтобы увидеть максимальное чисто для открытых файлов:

Подключаемся от пользователя (у меня это nginx):

Проверяем параметры Hard лимитов :

В консоле, можно ввести данную команду (очень удобно отображает):

Проверяем параметры лимитов Soft :

Увеличить Max Open File Limit в Mac OS X

Выполним проверку лимитов с помощью:

  • Первый аргумент — soft limit.
  • Второй аргумент — hard limit.

Можно прописать в файл:

Увеличюем nginx worker_rlimit_nofile в nginx ( на уровне Nginx)

В nginx также можно увеличить лимиты с директивой worker_rlimit_nofile, которая позволяет увеличить этот лимит, если это не хватает данного ресурса на лету на уровне процесса:

И прописываем (редактируем):

После чего, проверяем конфигурацию nginx и перезапускаем его:
Save and close the file. Reload nginx web server, enter:

В комментариях писали что нельзя установить данные лимиты для Kali Linux. Вот, решил показать наглядный пример:

ulimit в Kali Linux

Включение ограничений на основе PAM в Unix/Lixux

Для Debian/Ubuntu

Редактируем файл (Debian/Ubuntu):

Открываем еще один файл:

И, приводим к виду:

И выполняем рестарт:

Для CentOS/RedHat/Fedora

Редактируем файл (Debian/Ubuntu):

Открываем еще один файл:

И, приводим к виду:

И выполняем рестарт:

У меня все! Статья «Увеличить Max Open File Limit в Unix/Linux», завершено.

3 thoughts on “ Увеличить Max Open File Limit в Unix/Linux ”

в kali linux не работает смена хард и софт лимитов. всё равно пишет 4096 и 1024 соответственно.

Можно! Что-то делаете не так. Я выложил скриншот в статье и показал что можно все сделать.

Мужикам на картинке к статье явно не повезло.

Свет приглушён, явно видно зелёный оттенок табличек аварийного освещения — либо дело за полночь, либо у них блекаут и работают от дизеля.

Читайте также:  Мигание синего экрана windows 10

Сидят за консолью. По сети, оно, похоже, уже не отвечает. Плохо дело.

Стул притащили. Значит, давно не отвечает. Надо было прописать MAX OPEN FILE LIMIT заранее, а не когда уже навернулось.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Русские Блоги

Слишком много открытых файлов в Linux

[b] Ответ один (проверенный и выполнимый), [/ b]

Метод 1 (постоянная настройка)

Добавьте в конец файла:
// * означает, что все пользователи не должны корректировать значение слишком сильно. Это связано с аппаратным обеспечением

Также добавьте в конце vi /etc/sysctl.conf

Перезапустите, количество просмотров с ulimit -n уже 99999

После редактирования выполните следующую команду, чтобы изменения вступили в силу немедленно:

Метод 2 (предварительный)

Введите ulimit -n 99999 непосредственно в терминале и нажмите Enter, чтобы ок

Ядро Linux иногда сообщает «Слишком много открытых файлов», потому что значение по умолчанию file-max (8096) слишком мало. Чтобы решить эту проблему, вы можете выполнить следующие команды как root (или добавить их в сценарий инициализации в /etc/rcS.d/*.)

Метод заключается в изменении предела количества открытых файлов операционной системы следующим образом:

1. Настройте систему в соответствии с требованиями максимального количества открытых файлов и убедитесь, что максимальное количество открытых файлов было правильно установлено, проверив файл / proc / sys / fs / file-max.

Если значение параметра слишком мало, измените переменную в файле /etc/sysctl.conf на соответствующее значение. Это вступит в силу после каждого перезапуска. Если значение настройки достаточно велико, пропустите следующий шаг.

Отредактируйте файл /etc/sysctl.conf и вставьте следующую строку.

2. Установите максимальное количество открытых файлов в файле /etc/security/limits.conf.
#
Добавьте следующую строку.

Эта строка устанавливает количество открытых файлов по умолчанию для каждого пользователя равным 2048. Обратите внимание, что элемент «nofile» имеет два возможных ограничения. Это трудно и мягко под элементом. Чтобы измененное максимальное количество открытых файлов вступило в силу, эти два ограничения должны быть установлены. Если вы используете настройку «-», жесткие и программные настройки будут установлены одновременно.
Жесткий предел указывает максимальное значение, которое можно установить в мягком ограничении. Мягкий предел относится к текущему значению системы. Жесткий лимит может быть снижен обычными пользователями. Но это не может быть увеличено. Мягкое ограничение не может быть установлено выше жесткого ограничения. Только пользователь root может увеличить жесткий лимит.
При добавлении описания ограничения файла вы можете просто удвоить текущее значение. Примеры следующие: если вы хотите увеличить значение по умолчанию 1024, лучше увеличить до 2048, если вы хотите продолжить увеличение, вам нужно установить значение 4096.

Другая ситуация заключается в том, что при создании индекса также есть две возможности: одна — слишком маленький коэффициент слияния, в результате чего число создаваемых файлов превышает ограничение операционной системы. В это время коэффициент слияния можно изменить, а также ограничение на количество открытых файлов операционной системы. Другое заключается в том, что коэффициент слияния ограничен памятью виртуальной машины и не может быть настроен на больший размер, а количество индексируемых документов очень велико. В настоящее время это можно решить только путем изменения ограничения количества открытых файлов операционной системы.

Исходя из этого, я также изменил один из следующих файлов конфигурации

Затем сервис перезапускает сеть, они оптимизируются с помощью сокетов TCP.

Кроме того, вам нужно добавить в /etc/rc.d/rc.local, чтобы сделать его эффективным при перезапуске.

Читайте также:  Как отключить автозагрузку microsoft edge windows 10

Поскольку не все программы запускаются с правами root, во всех Linux существует различие между жесткими и программными открытыми файлами. Обычные пользователи ограничены аппаратно, независимо от того, как настроено высокое значение ulimit -n $, они не могут запускать / etc / security Значение nofile в /limits.conf.

После этой оптимизации lsof -p $ java_pid | wc -l может работать с более чем 4000, не выбрасывая слишком много открытых файлов.

Источник

Ошибка too many open files в Linux

Если вы работали с программами, которым приходится обрабатывать очень большое количество файловых дескрипторов, например с распределенными базами данных, такими, как Elasticsearch, то вы, наверняка, сталкивались с ошибкой «too many open files в Linux».

В этой небольшой статье мы разберемся, что означает эта ошибка, а также как её исправить в различных ситуациях.

Ошибка too many open files Linux

Дословно эта ошибка означает, что программа открыла слишком много файлов и больше ей открывать нельзя. В Linux установлены жёсткие ограничения на количество открываемых файлов для каждого процесса и пользователя.

Посмотреть, сколько файлов можно открыть в вашей файловой системе, можно, выполнив команду:

Посмотреть текущие ограничения количества открытых файлов для пользователя можно командой:

Утилита ulimit возвращает два вида ограничений — hard и soft. Ограничение soft вы можете менять в любую сторону, пока оно не превышает hard. Ограничение hard можно менять только в меньшую сторону от имени обычного пользователя. От имени суперпользователя можно менять оба вида ограничений так, как нужно. По умолчанию отображаются soft-ограничения:

Чтобы вывести hard, используйте опцию -H:

Вы можете изменить ограничение, просто передав в ulimit новое значение:

Но поскольку hard-ограничение составляет 4000, то установить лимит больше этого значения вы не сможете. Чтобы изменить настройки ограничений для пользователя на постоянной основе, нужно настроить файл /etc/security/limits.conf. Синтаксис у него такой:

имя_пользователя тип_ограничения название_ограничения значение

Вместо имени пользователя можно использовать звездочку, чтобы изменения применялись ко всем пользователям в системе. Тип ограничения может быть soft или hard. Название — в нашем случае нужно nofile. И последний пункт — нужное значение. Установим максимум — 1617596.

sudo vi /etc/security/limits.conf

* hard nofile 1617596
* soft nofile 1617596

Нужно установить значение для soft и hard параметра, если вы хотите, чтобы изменения вступили в силу. Также убедитесь, что в файле /etc/pam.d/common-session есть такая строчка:

session required pam_limits.so

Если её нет, добавьте в конец. Она нужна, чтобы ваши ограничения загружались при авторизации пользователя.

Если вам нужно настроить ограничения только для определенного сервиса, например Apache или Elasticsearch, то для этого не обязательно менять все настройки в системе. Вы можете сделать это с помощью systemctl. Просто выполните:

sudo systemctl edit имя_сервиса

И добавьте в открывшейся файл такие строки:

[Service]
LimitNOFILE=1617596
LimitNOFILESoft=1617596

Здесь мы устанавливаем максимально возможное ограничение как для hard- так и для soft-параметра. Дальше нужно закрыть этот файл и обновить конфигурацию сервисов:

sudo systemctl daemon-reload

Затем перезагрузить нужный сервис:

sudo systemctl restart имя_сервиса

Убедится, что для вашего сервиса применились нужные ограничения, можно, открыв файл по пути /proc/pid_сервиса/limits. Сначала смотрим PID нужного нам сервиса:

ps aux | grep elasticsearch

Затем смотрим информацию:

Выводы

В этой небольшой статье мы разобрали, что делать, если возникает ошибка «слишком много открытых файлов Linux», а также как изменять ограничения на количество открытых файлов для пользователя и процесса в Linux.

Источник

Оцените статью