Книга: Разработка приложений в среде Linux. Второе издание
10.3.3. Применение ограничений использования ресурсов
10.3.3. Применение ограничений использования ресурсов
Чтобы помочь в предотвращении неконтролируемого снижения производительности процессами, Unix отслеживает многие ресурсы, которые может использовать процесс, и позволяет системному администратору и самим пользователям накладывать ограничения на расход ресурсов процессами.
Предусмотрены два класса доступных ограничений: жесткие и мягкие ограничения. Жесткие обычно установлены при запуске системы в RLIM_INFINITY
, что означает отсутствие каких-либо ограничений. Единственное исключение из этого — RLIMIT_CORE
(максимальный размер дампа памяти), который Linux инициирует нулем, чтобы предотвратить неожиданный сброс дампов ядра. Многие дистрибутивы сбрасывают этот лимит при запуске, однако, большинство технических пользователей ожидают появления дампов памяти при некоторых условиях (информацию о дампах памяти можно найти далее в главе). Мягкие ограничения — это те ограничения, которые установлены в ядре в данный момент. Любой процесс может наложить мягкое ограничение на использование ресурса на определенном уровне — равном или более низком, чем установленное жесткое ограничение.
Таблица 10.2. Ограничения ресурсов
Значение | Лимит |
---|---|
RLIMIT_AS |
Максимальный объем памяти, доступный процессу. Включает память для стека, глобальных переменных и динамически выделенную память. |
RLIMIT_CORE |
Максимальный размер дампа памяти, генерируемого ядром (если файл дампа получается слишком большим, он не создается). |
RLIMIT_CPU |
Общее используемое время процессора (в секундах). Более подробно об этом ограничении рассказывается при описании SIGXCPU в главе 12. |
RLIMIT_DATA |
Максимальный объем памяти данных (в байтах). Это не включает динамически выделенную память. |
RLIMIT_FSIZE |
Максимальный размер открытого файла (проверяется при записи). Более подробно об этом ограничении рассказывается при описании SIGXFSZ в главе 12. |
RLIMIT_MEMLOCK |
Максимальный объем памяти, которая может быть блокирована с помощью mlock() . Функция mlock() рассматривается в главе 13. |
RLIMIT_NOFILE |
Максимальное количество открытых файлов. |
RLIMIT_NPROC |
Максимальное количество дочерних процессов, которые может породить данный процесс. Это ограничивает только количество дочерних процессов, которые могут существовать одновременно. Это не ограничивает количества наследников дочерних процессов — каждый из них может иметь до RLIMIT_NPROC потомков. |
RLIMIT_RSS |
Максимальный объем ОЗУ, использованный в любой момент (всякое превышение этого объема используемой памяти вызывает страничную подкачку). Это также известно под названием размера резидентной части (resident set size). |
RLIMIT_STACK |
Максимальный размер памяти стека (в байтах), включая все локальные переменные. |
Различные ограничения, которые могут быть установлены, перечислены в табл. 10.2 и определены в <sys/resource.h>
. Системные вызовы getrlimit()
и setrlimit()
устанавливают и получают ограничения для отдельного ресурса.
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
Обе эти функции используют структуру struct rlimit
, определенную следующим образом:
struct rlimit {
long int rlim_cur; /* мягкое ограничение */
long int rlim_max; /* жесткое ограничение */
};
Второй член структуры — rlim_max
, указывает жесткое ограничение лимита, переданного в параметре resource
, a rlim_cur
— мягкое ограничение. Это те же наборы лимитов, которыми манипулируют команды ulimit
и limit
, одна из которых встроена в большинство командных оболочек.
- Имена индексов ограничений
- Пример использования шаблона «Выводы – рекомендации»
- Применение функции scanf( )
- Наносится ли какой-нибудь вред USB-брелоку, когда его извлекают из разъема без использования функции безопасного отключе...
- Применение PHP-технологий в программе HtmlPad
- 17.6 Применение агентов новостей для настольных систем
- 2.3. Эмпирическая модель обучения Дэвида Колба и ее применение в практике бизнес-тренинга
- 6.4. Использования Samba
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- Применение основного потока
- Применение пользовательских атрибутов
- Листинг 5.1. (shm.c) Пример совместного использования памяти