В-четвертых, ограничение количества ручек
1. Ограничьте количество пользовательских дескрипторов
Лимит пользователя для входа, как упоминалось выше, можно настроить с помощью файла подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/ следующим образом:
Примечание: изменение файла конфигурации не повлияет на ограничение дескриптора текущего пользователя, вошедшего в систему.
2. Предел обработки обслуживания
Примечание. Изменение файла конфигурации не приведет к изменению ограничения дескриптора запущенной в данный момент службы.
3. Общее количество системных дескрипторов.
Количество процессов, которые могут быть открыты каждым пользователем, и количество дескрипторов, которые могут быть открыты каждым процессом, указаны выше; есть также файл, который устанавливает общее количество дескрипторов, которые могут быть открыты всеми процессами в системе, то есть этот параметр является системным.
Измените максимальное количество системных дескрипторов, метод следующий (действителен после настройки):
Просмотрите общее количество дескрипторов, используемых в настоящее время в системе:
Во-вторых, ограничения ресурсов Linux
1. Ограничения пользовательских ресурсов
В Bash есть команда ulimit, которая обеспечивает управление доступными ресурсами оболочки и процессами, запускаемыми оболочкой. В основном это количество открытых файловых дескрипторов, максимальное количество процессов пользователя, размер файла coredump и т. Д.
Конфигурацию ограничений ресурсов можно настроить в файле подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/. Система сначала загружает limits.conf, а затем загружает каталог limits.d в алфавитном порядке. После загрузки файла конфигурации он перезапишет предыдущую конфигурацию. Формат конфигурации следующий:
soft — значение предупреждения, hard — максимальное значение, * означает соответствие всем пользователям
Просмотр ограничений пользовательских ресурсов для входа в текущую оболочку
2. ограничение ресурса обслуживания
Мы всегда упоминали оболочку выше, поэтому для тех пользователей, которые не вошли в систему через аутентификацию PAM, таких как mysql, nginx и т. Д., Вышеуказанная конфигурация не эффективна;
Поскольку в системе CentOS 7 / RHEL 7 вместо предыдущего SysV используется Systemd, область конфигурации файла /etc/security/limits.conf сокращается. Конфигурация в limits.conf применима только для аутентификации PAM. Ограничение ресурсов вошедшего в систему пользователя, оно не влияет на ограничение ресурсов службы systemd.
Его нужно настроить с помощью файлов /etc/systemd/system.conf и /etc/systemd/user.conf. Точно так же все файлы .conf в двух соответствующих каталогах /etc/systemd/system.conf.d/* .conf и /etc/systemd/user.conf.d/*.conf.
Среди них system.conf используется экземплярами системы, а user.conf — экземплярами пользователей. Для общих служб используйте конфигурацию в system.conf. Конфигурация в system.conf.d / *. Conf переопределит system.conf.
Формат конфигурации следующий:
= Тип ресурса слева, размер справа
Просмотр лимита ресурсов службы
cat /proc/YOUR-PID/limits
Например, проверьте влияние конфигурации службы nginx:
3. Лимит системных ресурсов
Для пользователя и службы ранее были выделены ресурсы, но каково общее количество ресурсов в системе? Сюда входят параметры ядра. Существует много параметров ядра. Нам нужно только знать, как изменить наиболее часто используемые, такие как количество процессов и количество дескрипторов.
ulimit размеры файлов
В основном при работе в системе UNIX мы считаем, что ее ресурсы безграничны. Например, мы не заботимся о том, что созданный файл получится «слишком большим», а это не так уж редко в персональных компьютерах на гибких дисках. Если же мы занимаемся сопровождением и администрированием системы UNIX, то мы должны быть готовы иметь дело с ситуациями, когда превышаются различные предельные значения системы. Всегда лучше исследовать эти вопросы заранее в некритичных ситуациях, поэтому давайте рассмотрим пределы размеров файлов и их смысл.
Некоторые параметры «зашиты» в ядро системы при ее генерации. Одним из таких значений является максимальный размер файла. Он определяет наибольшее число блоков, которые может занимать файл. Этот параметр тесно связан с принятым в UNIX методом использования индексных дескрипторов файла (inodes). Это наборы указателей, среди которых первые десять указывают на блоки данных, следующий указывает на другую таблицу, следующий — на таблицу, указывающую на таблицу и т.д.
Имеется еще одно ограничение размера файла, которое определено для каждого пользователя во время работы в системе — число ulimit (user limit — пользовательский предел). Это значение устанавливается в момент вашей регистрации в системе и представляет собой число блоков по 512 байт, которые вы можете записать в любой заданный файл. В shell’е имеется команда ulimit, которая при ее вызове без аргументов выводит это число. Эта же команда позволяет вам уменьшить ваше значение ulimit. Только суперпользователь (root) может УВЕЛИЧИТЬ значения ulimit.
Побочным эффектом уменьшения значения ulimit является то, что вы не можете снова увеличить его до регистрационного значения. Значение ulimit остается таким же на все время работы вашего shell, поэтому для восстановления регистрационного значения вам необходимо выйти из системы, а затем снова зарегистрироваться.
Еще одним интересным моментом является то, что если вы установите ваше значение ulimit равным 0, вы не сможете создать никакие файлы! Максимально допустимым размером файла в данном случае является нулевой, поэтому никакой файл не может быть создан. Это представляется достаточно резонным, однако существуют такие ситуации, когда файл нулевого размера МОЖЕТ существовать. Опять же, для восстановления вашего обычного значения ulimit необходимо выйти из системы, а затем снова
зарегистрироваться.
Как отмечалось ранее, увеличить значение ulimit может только суперпользователь. Эта процедура довольно проста. Сначала нужно увеличить значение ulimit командой ulimit, а затем запустить shell. Этот новый shell имеет новое значение ulimit. Если мы хотим, чтобы система загружалась с shell, имеющим большее значение ulimit, мы можем установить программу в inittab (таблице инициализации системы), чтобы эта операция выполнялась автоматически.
Исходные данные
ОС: Ubuntu 16.04.4 LTS
БД: Oracle MySQL 5.7.22
Задача: Решить проблему с невозможностью установки параметров max_connections=300 и table_open_cache=16000
При старте MySQL в логе error.log мы можем увидеть предупреждения вида:
2018-04-27T01:01:18.027751Z 0 Changed limits: max_open_files: 1024 (requested 32310) 2018-04-27T01:01:18.027846Z 0 Changed limits: max_connections: 214 (requested 300) 2018-04-27T01:01:18.027853Z 0 Changed limits: table_open_cache: 400 (requested 16000)
При этом в файле конфигурации /etc/mysql/mysql.conf.d/mysqld.cnf у нас установлено:
max_connections = 300 table_open_cache = 16000
Но MySQL не может установить эти значение и они понижаются до разрешенных, а именно max_connections всего до 214 разрешенных соединений, а table_open_cache до 400.
Если посмотреть настройки MySQL, то можем увидеть такую картину:
# mysql -u root -p mysql> show global variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 300 | +-----------------+-------+ 1 row in set (0,00 sec) mysql> show global variables like '%open_files_limit%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit | 1024 | +------------------+-------+ 1 row in set (0,00 sec) mysql> show global variables like '%table_open_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | table_open_cache | 400 | +------------------+-------+ 1 row in set (0,00 sec)
Вроде как max_connections и установлен 300, но остальные настройки явно не те, что нам нужны.
Корень проблемы кроется в ограничении ОС на количество открываемых файловых дескрипторов для процесса mysqld, посмотреть ограничение мы можем так:
# cat /proc/$(pgrep mysqld)/limits | grep open Max open files 1024 4096 files
В ней мы видим, что максимально разрешено открывать не более 1024 файловых дескрипторов.
Именно из-за этого при старте mysqld не может установить запрошенные нами опции max_connections, table_open_cache.
Бригада ulimit
Команду ulimit можно использовать для увеличения количества файлов, которые можно раскрыть в оболочке. Эта команда является встроенной командой bash, поэтому она влияет только на bash и програмки, запускаемые из него. Синтаксис ulimit следующий:
Параметры определяют, что довольствуется. Вы можете увидеть некоторые варианты, как показано ниже
- (Передача текущих настроек): заставляет ulimit извещать о своих текущих настройках.
- (Ограничения файлов) ограничивает размер файлов, которые могут быть сделаны оболочкой.
- Ограничивает количество открытых файловых дескрипторов.
- и (Жесткие и мягкие ограничения) параметры меняют другие параметры, в результате чего они устанавливаются как жесткие или мягкие ограничения соответственно. Жесткие ограничения смогут впоследствии не увеличиваться, но мягкие ограничения могут быть. Если ни один из вариантов не предусмотрен, ulimit ставит как жесткие, так и мягкие ограничения для указанной функции.
Итак, чтобы увидеть текущее ограничение, вы сможете сделать, как показано ниже:
Вы можете проверить жесткий предел, как показано ниже:
И мягкий предел, как показано ниже:
Вы можете изменить ограничение, как представлено ниже
И вы можете проверить это ниже:
Проблема сейчас в том, что если вы выйдете из системы и войдете в систему или перезагрузите пк, значение будет сброшено. Помните, что для того, чтобы сделать эти ограничения более постоянными, нужно отредактировать один из файлов конфигурации пользователя ( or ) или общесистемные файлы конфигурации ( or ) приплюсовав командную строку ulimit в конец файла, как показано ниже.
Теперь, простонар если вы перезагрузитесь, ограничение, установленное пользователем, будет постоянным. Вы можете увеличить только твердый лимит () или мягкий лимит (), но вы должны заметить, что мягкие ограничения могут быть установлены другым пользователем, в то время как жесткие ограничения могут быть изменены только пользователем root после его аппараты.
Ошибка 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.
Нужно установить значение для soft и hard параметра, если вы хотите, чтобы изменения вступили в силу. Также убедитесь, что в файле /etc/pam.d/common-session есть такая строчка:
Если её нет, добавьте в конец. Она нужна, чтобы ваши ограничения загружались при авторизации пользователя.
Если вам нужно настроить ограничения только для определенного сервиса, например Apache или Elasticsearch, то для этого не обязательно менять все настройки в системе. Вы можете сделать это с помощью systemctl. Просто выполните:
И добавьте в открывшейся файл такие строки:
Здесь мы устанавливаем максимально возможное ограничение как для hard- так и для soft-параметра. Дальше нужно закрыть этот файл и обновить конфигурацию сервисов:
Затем перезагрузить нужный сервис:
Убедится, что для вашего сервиса применились нужные ограничения, можно, открыв файл по пути /proc/pid_сервиса/limits. Сначала смотрим PID нужного нам сервиса:
Затем смотрим информацию:
Увеличить Max Open File Limit в Unix/Linux
Приведу команды на различные Unix/Linux ОС
Увеличить Max Open File Limit в Linux
Для начала проверим какой предел установлен в ОС:
# cat /proc/sys/fs/file-max
Увеличиваем данный предел в Linux
Мы можем увеличить лимиты для открытых файлов:
- Временно.
- Постоянно.
-===ВРЕМЕННО===-
Если есть необходимость увеличить лимит временно (для тестирования, например), то можно это сделать так:
# sysctl -w fs.file-max=500000
Или:
# echo "500000" > /proc/sys/fs/file-max
Вот еще один пример:
# ulimit -n 65635
-===ПОСТОЯННО===-
Если есть необходимость увеличить лимит навсегда, то можно это сделать так:
# vim /etc/sysctl.conf fs.file-max = 500000
Эти настройки будут сохраняться даже после перезагрузки системы. После добавления конфигурации в файл, выполните следующую команду, чтобы изменения вступили в силу:
# sysctl -p
Настройка лимитов для каждого пользователя
# vim /etc/security/limits.conf
Добавляем параметры:
* hard nofile 500000 * soft nofile 500000 root hard nofile 500000 root soft nofile 500000
Проверка установленных лимитов
Используйте следующую команду, чтобы увидеть максимальное чисто для открытых файлов:
# cat /proc/sys/fs/file-max
Подключаемся от пользователя (у меня это nginx):
# su nginx
Проверяем параметры Hard лимитов:
# ulimit -Hn
В консоле, можно ввести данную команду (очень удобно отображает):
# for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done
Проверяем параметры лимитов Soft:
# ulimit -Sn
Увеличить Max Open File Limit в Mac OS X
Выполним проверку лимитов с помощью:
$ launchctl limit maxfiles
Где:
- Первый аргумент — soft limit.
- Второй аргумент — hard limit.
Можно прописать в файл:
# vim ~/.bash_profile
Следующее значение:
ulimit -n 65536 200000
Вот и все!
Увеличюем nginx worker_rlimit_nofile в nginx ( на уровне Nginx)
В nginx также можно увеличить лимиты с директивой worker_rlimit_nofile, которая позволяет увеличить этот лимит, если это не хватает данного ресурса на лету на уровне процесса:
# vim /etc/nginx/nginx.conf
И прописываем (редактируем):
# set open fd limit to 30000 worker_rlimit_nofile 30000;
После чего, проверяем конфигурацию nginx и перезапускаем его:
Save and close the file. Reload nginx web server, enter:
# nginx -t && service nginx -s reload
ulimit в Kali Linux
Включение ограничений на основе PAM в Unix/Lixux
Для Debian/Ubuntu
Редактируем файл (Debian/Ubuntu):
# vim /etc/pam.d/common-session
Вставляем:
session required pam_limits.so
Открываем еще один файл:
# vim /etc/security/limits.conf
Прописываем лимиты:
* soft nofile 65536 * hard nofile 200000
Открываем:
# vim /etc/ssh/sshd_config
И, приводим к виду:
UseLogin yes
И выполняем рестарт:
# reboot
Для CentOS/RedHat/Fedora
Редактируем файл (Debian/Ubuntu):
# vim /etc/pam.d/login
Вставляем:
session required pam_limits.so
Открываем еще один файл:
# vim /etc/security/limits.conf
Прописываем лимиты:
* soft nofile 65536 * hard nofile 200000
Открываем:
# vim /etc/ssh/sshd_config
И, приводим к виду:
UseLogin yes
И выполняем рестарт:
# reboot
У меня все! Статья «Увеличить Max Open File Limit в Unix/Linux», завершено.
Dmesg Command in Linux
21 Декабря 2019
|
Терминал
В этом руководстве мы рассмотрим основы dmesg команды.
Ядро Linux — это ядро операционной системы, которое контролирует доступ к системным ресурсам, таким как процессор, устройства ввода-вывода, физическая память и файловые системы. Ядро записывает различные сообщения в кольцевой буфер ядра в процессе загрузки и во время работы системы. Эти сообщения содержат различную информацию о работе системы.
Кольцевой буфер ядра — это часть физической памяти, которая содержит сообщения журнала ядра. Он имеет фиксированный размер, что означает, что после заполнения буфера старые записи журналов перезаписываются.
Утилита командной строки используется для печати и управления кольцевого буфера ядра в Linux и других Unix-подобных операционных систем. Это полезно для изучения загрузочных сообщений ядра и устранения проблем, связанных с оборудованием.
Использование команды
Синтаксис команды следующий:
При вызове без каких-либо параметров записывает все сообщения из кольцевого буфера ядра в стандартный вывод:
По умолчанию все пользователи могут запускать команду. Однако в некоторых системах доступ к ним может быть ограничен для пользователей без полномочий root. В этой ситуации при вызове вы получите сообщение об ошибке, как показано ниже:
Параметр ядра указывает, могут ли непривилегированные пользователи просматривать сообщения из буфера журнала ядра. Чтобы снять ограничения, установите его на ноль:
Обычно выходные данные содержат много строк информации, так что только последняя часть выходных данных является видимой. Чтобы увидеть одну страницу за раз, перенаправьте вывод в утилиту пейджера, такую как или :
Используется для сохранения цветного вывода.
Если вы хотите фильтровать сообщения буфера, используйте . Например, чтобы просмотреть только сообщения, связанные с USB, вы должны набрать:
читает сообщения, сгенерированные ядром, из виртуального файла. Этот файл предоставляет интерфейс к кольцевому буферу ядра и может быть открыт только одним процессом. Если в вашей системе запущен процесс, и вы пытаетесь прочитать файл с помощью , или , команда зависнет.
Демон отвалов сообщения ядра , так что вы можете использовать этот файл журнала:
Команда предоставляет ряд опций, которые помогут вам отформатировать и отфильтровать вывод.
Одна из наиболее часто используемых опций — это ( ), которая обеспечивает удобочитаемый вывод. Эта опция направляет вывод команды в пейджер:
Для печати удобочитаемых временных меток используйте опцию ( ):
Формат отметок времени также может быть установлен с помощью параметра, который может быть ctime, reltime, delta, notime или iso. Например, чтобы использовать дельта-формат, введите:
Вы также можете объединить два или более вариантов:
Чтобы просмотреть вывод команды в режиме реального времени, используйте параметр ( ):
Фильтрация вывода
Вы можете ограничить вывод данными объектами и уровнями.
Средство представляет процесс, который создал сообщение. поддерживает следующие возможности журнала:
- — сообщения ядра
- — сообщения уровня пользователя
- — почтовая система
- — системные демоны
- — сообщения безопасности / авторизации
- — внутренние сообщения syslogd
- — подсистема линейного принтера
- — подсистема сетевых новостей
Опция ( ) позволяет ограничить вывод определенными объектами. Опция принимает одно или несколько разделенных запятыми объектов.
Например, для отображения только сообщений ядра и системных демонов вы должны использовать:
Каждое сообщение журнала связано с уровнем журнала, который показывает важность сообщения. поддерживает следующие уровни журнала:
- — система неработоспособна
- — действие должно быть предпринято немедленно
- — критические условия
- — условия ошибки
- — условия предупреждения
- — нормальное, но значимое состояние
- — информационный
- — сообщения уровня отладки
Опция ( ) ограничивает вывод определенными уровнями. Опция принимает один или несколько уровней, разделенных запятыми.
Следующая команда отображает только сообщения об ошибках и критические сообщения:
Очистка кольцевого буфера
Опция ( ) позволяет очистить кольцевой буфер:
Только root или пользователи с привилегиями sudo могут очистить буфер.
Чтобы распечатать содержимое буфера перед очисткой, используйте параметр ( ):
Если вы хотите сохранить текущие журналы в файле перед его очисткой, перенаправьте вывод в файл:
Вывод
Команда позволяет вам просматривать и контролировать кольцевой буфер ядра. Это может быть очень полезно при устранении проблем с ядром или оборудованием.
Введите в своем терминале информацию о всех доступных опциях.
Три, количество процессов ограничено
1. Ограничьте количество пользовательских процессов.
По умолчанию в /etc/security/limits.d/ есть файл подконфигурации 20-nproc.conf, который используется для установки максимального количества процессов для каждого пользователя.
Проверка /etc/security/limits.d/20-nproc.conf обнаружит, что пользователь root по умолчанию не ограничен, а максимальное количество обычных пользовательских процессов составляет 4096
Фактически, root и обычные пользователи по умолчанию используют значение # cat / proc / sys / kernel / threads-max / 2, что составляет половину количества системных потоков.
Установите максимальное количество процессов на пользователя
Примечание. Изменение файла конфигурации не повлияет на ограничение процесса для текущего пользователя, вошедшего в систему.
2. Лимит процесса обслуживания
Примечание: изменение файла конфигурации не изменит ограничение на количество процессов запущенной в данный момент службы, и ее необходимо перезапустить.
3. Общее количество процессов в системе.
Выше мы установили максимальное количество процессов, которые может открыть каждый пользователь, но это не контролирует общее количество процессов в системе (kernel.pid_max). Предполагая, что kernel.pid_max = 1000, максимальное количество пользовательских процессов пользователя, независимо от того, насколько велико заданное значение, Максимальное количество процессов, которые можно открыть, по-прежнему составляет 1000
Просмотрите глобальный метод pid_max:
метод первый:
Метод второй:
Временно измените этот метод значения:
Следовательно, после завершения вышеуказанных операций значение максимального числа пользовательских процессов изменяется правильно.
Вышеуказанное действует только временно, оно будет недействительным после перезапуска машины, постоянный эффективный метод:
Добавьте kernel.pid_max = 65535 в /etc/sysctl.conf
или же:
Затем перезапустите машину.
Решение
Давайте увеличим лимит файловых дескрипторов для mysqld на 10000.
Для начала нужно выяснить систему инициализации в нашем Linux дистрибутиве, выполняем:
strings /sbin/init | awk 'match($0, /(upstart|systemd|sysvinit)/) { print toupper(substr($0, RSTART, RLENGTH));exit; }'
Команда выдала SYSTEMD.
Для systemd лимиты устанавливаются немного по другому, чем принято думать, а именно:
Выясним где находится unit файл для запуска MySQL:
# systemctl status mysql ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Пт 2018-04-27 06:01:36 +05; 6h ago Main PID: 6370 (mysqld) Tasks: 82 Memory: 88.2G CPU: 1d 19h 2min 53.203s CGroup: /system.slice/mysql.service └─6370 /usr/sbin/mysqld
Создадим файл с описанием новых лимитов:
Мы выяснили, что unit файл это /lib/systemd/system/mysql.service, теперь нам нужно создать каталог /lib/systemd/system/mysql.service.d и в нем разместить файл limit.conf со следующим содержимым:
LimitNOFILE=10000
Выполним несколько команд для этого:
mysql_systemd_dir="/lib/systemd/system/mysql.service.d" mkdir -p ${mysql_systemd_dir} echo "" >${mysql_systemd_dir}/limit.conf echo "LimitNOFILE=10000" >>${mysql_systemd_dir}/limit.conf systemctl daemon-reload
Теперь проверим будет ли наша конфигурация подхвачена:
# systemctl status mysql ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/mysql.service.d └─limit.conf Active: active (running) since Пт 2018-04-27 06:01:36 +05; 6h ago Main PID: 6370 (mysqld) Tasks: 82 Memory: 88.2G CPU: 1d 19h 2min 53.203s CGroup: /system.slice/mysql.service └─6370 /usr/sbin/mysqld
Отлично, теперь нам нужно перезапустить MySQL:
systemctl restart mysql
Проверим настройки MySQL:
# mysql -u root -p mysql> show global variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 300 | +-----------------+-------+ 1 row in set (0,00 sec) mysql> show global variables like '%open_files_limit%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit | 10000 | +------------------+-------+ 1 row in set (0,00 sec) mysql> show global variables like '%table_open_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | table_open_cache | 16000 | +------------------+-------+ 1 row in set (0,00 sec)
Description
The pam_limits.so module applies ulimit limits, nice priority and number of simultaneous login sessions limit to user login sessions. This
description of the configuration file syntax applies to the /etc/security/limits.conf file and *.conf files in the /etc/security/limits.d directory.
The syntax of the lines is as follows:
<domain> <type> <item> <value>
The fields listed above should be filled as follows:
<domain>
- • a username
- • a groupname, with @group syntax. This should not be confused with netgroups.
- • the wildcard *, for default entry.
- • the wildcard %, for maxlogins limit only, can also be used with %group syntax. If the % wildcard is used alone it is identical to
using * with maxsyslogins limit. With a group specified after % it limits the total number of logins of all users that are member of the
group. - • an uid range specified as <min_uid><max_uid>. If min_uid is omitted, the match is exact for the max_uid. If max_uid is
omitted, all uids greater than or equal min_uid match. - • a gid range specified as @<min_gid><max_gid>. If min_gid is omitted, the match is exact for the max_gid. If
max_gid is omitted, all gids greater than or equal min_gid match. For the exact match all groups including the user’s supplementary groups are examined. For
the range matches only the user’s primary group is examined. - • a gid specified as %:<gid> applicable to maxlogins limit only. It limits the total number of logins of all users that are member of
the group with the specified gid. - <type>
- hard
- for enforcing hard resource limits. These limits are set by the superuser and enforced by the Kernel. The user cannot raise his requirement of system
resources above such values. - soft
- for enforcing soft resource limits. These limits are ones that the user can move up or down within the permitted range by any pre-existing
hard limits. The values specified with this token can be thought of as default values, for normal system usage. - —
- for enforcing both soft and hard resource limits together.
Note, if you specify a type of ‘-‘ but neglect to supply the item and value fields then the module will never enforce any limits on the specified user/group
etc. . - <item>
- core
- limits the core file size (KB)
- data
- maximum data size (KB)
- fsize
- maximum filesize (KB)
- memlock
- maximum locked-in-memory address space (KB)
- nofile
- maximum number of open files
- rss
- maximum resident set size (KB) (Ignored in Linux 2.4.30 and higher)
- stack
- maximum stack size (KB)
- cpu
- maximum CPU time (minutes)
- nproc
- maximum number of processes
- as
- address space limit (KB)
- maxlogins
- maximum number of logins for this user except for this with uid=0
- maxsyslogins
- maximum number of all logins on system
- priority
- the priority to run user process with (negative values boost process priority)
- locks
- maximum locked files (Linux 2.4 and higher)
- sigpending
- maximum number of pending signals (Linux 2.6 and higher)
- msgqueue
- maximum memory used by POSIX message queues (bytes) (Linux 2.6 and higher)
- nice
- maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values:
- rtprio
- maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher)
- All items support the values -1, unlimited or infinity indicating no limit, except for priority and nice.
If a hard limit or soft limit of a resource is set to a valid value, but outside of the supported range of the local system, the system may reject the new
limit or unexpected behavior may occur. If the control value required is used, the module will reject the login if a limit could not be set.
In general, individual limits have priority over group limits, so if you impose no limits for admin group, but one of the members in this group have
a limits line, the user will have its limits set according to this line.
Also, please note that all limit settings are set per login. They are not global, nor are they permanent; existing only for the duration of the
session.
In the limits configuration file, the ‘#‘ character introduces a comment — after which the rest of the line is ignored.
The pam_limits module does report configuration problems found in its configuration file and errors via syslog(3).
Too many open files
Нужно увеличить ограничение на количество одновременно открытых файлов в файле limits.conf.
# cat /proc/sys/fs/file-max 348651 # man limits.conf # nano /etc/security/limits.conf ... asterisk soft nofile 65536 asterisk hard nofile 65536 # ulimit -a ... # ulimit -n 65536 # ulimit -a core file size (blocks, -c) data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited