- Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- Re: Ограничить память и ЦПУ для пользователя
- limits.conf и лимиты потребления ресурсов для пользователей в Linux
- ulimit в Linux и ограничение ресурсов для пользователя
- выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Re: выставление ограничения на поедание памяти
- Как ограничить использование центрального процессора и памяти в Linux
- Контроль использования центрального процессора и памяти в Linux
- Как установить timeout
- Опции timeout:
- Как ограничить время выполнения программы (нагрузку на процессор)
- Как ограничить потребление памяти
- Как ограничить использование процессорного времени и памяти
- Ограничение нагрузки на процессор с множеством коротких дочерних процессов
- Продвинутые опции
- Сбор информации о «тяжёлых» процессах:
- Сбор статистики о «лёгких» дочерних процессах
- Выявление зависаний в программе:
Ограничить память и ЦПУ для пользователя
Как ограничить кол-во используемой памяти и ЦПУ в % определённому пользователю? ulimit же только на 1 процесс действует.
Что то кроме всяких OpenVZ ничего не нагуглилось.
Re: Ограничить память и ЦПУ для пользователя
Re: Ограничить память и ЦПУ для пользователя
CPU делить в % между пользователями нельзя, by design.
Re: Ограничить память и ЦПУ для пользователя
разве? ulimit просто засунуть в .bashrc или что вы там используете, и должно быть хорошо. я так думаю
Re: Ограничить память и ЦПУ для пользователя
все эти limits, ulimit и пр ограничивают по памяти каждый процесс пользователя по памяти, а я хочу все процессы пользователя.
Re: Ограничить память и ЦПУ для пользователя
> CPU делить в % между пользователями нельзя, by design.
Fair scheduling и process containers aka control groups вроде бы уже включили в ядро.
Re: Ограничить память и ЦПУ для пользователя
Re: Ограничить память и ЦПУ для пользователя
Как минимум насчет ulimit он совершенно прав.
Re: Ограничить память и ЦПУ для пользователя
Я не про ulimit говорю.
Re: Ограничить память и ЦПУ для пользователя
> Я не про ulimit говорю.
А про что? AFAIK, до последнего года в стандартном ядре не было средств ограничения именно пользователя — только процессов (как и сказал sdio).
Re: Ограничить память и ЦПУ для пользователя
Надо посмотреть, машина времени в Etch старой версии с огр. радиусом действия.
Re: Ограничить память и ЦПУ для пользователя
/etc/security/limits.conf как раз и задает значения по умолчанию для ulimit
Re: Ограничить память и ЦПУ для пользователя
Странно, я был уверен, что ulimit относится к bash, а /etc/security — к PAM.
Re: Ограничить память и ЦПУ для пользователя
Re: Ограничить память и ЦПУ для пользователя
Кажется оно, но придется пересобрать (а может и все таки пропатчить) ядро.
Источник
limits.conf и лимиты потребления ресурсов для пользователей в Linux
Прежде всего, как выяснить процессы каких пользователей потребляют больше всего ресурсов CPU оперативной памяти.
Для текущего момента посмотреть процессы можно при помощи утилиты ps
ps aux —sort=%cpu | grep -v ‘root’ | head -n 35
ps aux —sort=%mem | grep -v ‘root’ | head -n 35
Команды выведут сортированные списки процессов в одной из колонок каждого списка будет указано имя пользователя. Процессы, запущенные от имени root показываться не будут и выведутся только 35 самых активных процессов.
Подобным образом статистику посмотреть не удасться, например, для веб-сервера с mod_php, однаако в большинстве случаев это как раз та информация, которая нужна для того чтобы выбрать пользователей для которых нужно предусмотреть ограничения.
Ограничения нужны на нагруженных серверах, они существует у каждого хостинг провайдера.
Лимитировать количество процессов можно используя механизм ядра cgroups — на практике проще всего установить ограничения отредактировав файл /etc/security/limits.conf и перезагрузив сервер.
Изменять /etc/security/limits.conf может только пользователь root или другой пользователь работающий из под sudo.
Файл хорошо задокументирован, вся необходимая информация находится в нем в комментариях
В общем виде любое правило выглядит так:
domain — это пользователь или группа, для которых лимитируем ресурсы
type — тип ограничения: soft или hard, ограничение soft может быть переопределено пользователем.
item — ресурс, который ограничиваем — обычно это cpu (в минутах) или as — максимальное количество оперативной памяти (в Кб); также можно задать nice level, который не сможет быть превышен процессами пользователя/группы (минимум 20, максимум -19); здесь же можно задать chroot (только для debian)
item — само численное значение
Как уже упоминалось — для того чтобы изменения вступили в силу нужна перезагрузка.
ulimit в Linux и ограничение ресурсов для пользователя
Soft лимиты пользователь может переопределить используя ulimit
Выполнение команды с аргументом -a выведет актуальные ограничения
ulimit -as 1500000
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14685
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14685
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Ключи из вывода можно брать и использовать в командах, которые будут задавать ограничения для текущей терминальной сессии.
Дополнительно следует указывать тип ограничения:
-H — hard
-S — soft
Если не указывать ничего лимиты будут заданы жестко. hard здесь можно задать для текущего пользователя даже без прав root, но изменения не сохранятся после перезагрузки и чтобы ограничения были установлены постоянно нужно редактировать файл, который был рассмотрен ранее.
Создадим ограничение по оперативной памяти в 1500 Мб для пользователя
Выполнив ulimit -Hm сейчас можно увидеть, что ограничение установлено. Получить ту же информацию можно просмотрев лимиты для процесса
Можно указывать идентификатор любого процесса, запущенного от имени пользователя, для которого задали ограничение по памяти
Источник
выставление ограничения на поедание памяти
Где-то слышал, что такое возможно. открыл один из сайтов в Opera. Сначала проц работал с минуту на всю катушку. затем стремительно съелась вся память и начал жраться своп. затем, все просто остановилось. лишь, жесткий диск работает. сделать уже с час ничего не возможно. ни добраться к консоли, что бы убить процесс, ни ctrl+alt+backspace. полный тормоз. как предупредить такое?
почему под Linux такая философия? а если дома обычный пользователь?
Debian Etch r3
linu-2.6.18
просьба отвечать без приколов и плевков
Re: выставление ограничения на поедание памяти
Re: выставление ограничения на поедание памяти
>Где-то слышал, что такое возможно.
>просьба отвечать без приколов и плевков
Не получится, уходи сам
Re: выставление ограничения на поедание памяти
man limits.conf
Нет записи руководства для limits.conf
Re: выставление ограничения на поедание памяти
а перезапускать что-либо нужно, если и создать такой файл в debian’е?
Re: выставление ограничения на поедание памяти
поставить правильное значение overcommit (sysctl vm.overcommit_memory=2), включить swap. почитать man ulimit.
Re: выставление ограничения на поедание памяти
Re: выставление ограничения на поедание памяти
overcommit (sysctl vm.overcommit_memory=2)
bash: syntax error near unexpected token `sysctl’
не получается так
точно именно так нужно?
Re: выставление ограничения на поедание памяти
Перелогиниться. То есть, желательно, убить иксы, и все консольные сессии. После чего лимиты должны вступить в силу.
Re: выставление ограничения на поедание памяти
«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)
stack
maximum stack size (KB)
cpu
maximum CPU time (minutes)
nproc
maximum number of processes
as
address space limit
maxlogins
maximum number of logins for this user
maxsyslogins
maximum number of 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)
msqqueue
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)
rtprio»
Источник
Как ограничить использование центрального процессора и памяти в Linux
Контроль использования центрального процессора и памяти в Linux
Скрипт timeout — это полезная программа мониторинга использования ресурсов. Она ограничивает потребление времени и памяти процессом Linux. Это позволяет вам запускать программу под контролем, указав ограничения по времени и памяти, если программа нарушит эти пределы, то она будет остановлена.
Особенностью этого скрипта является то, что он не только контролирует родительский процесс, но также учитывает его дочерние форки. Вы можете выбрать, ограничен ли объем наблюдаемых процессов группой процессов или деревом процессов.
Программа не требует установки и у неё практически нет зависимостей (только Perl 5), она запускает программу вместе с её аргументами и контролирует её потребление ресурсов, если программа выходит за пределы, то она завершается, а пользователь уведомляется сообщением.
Программа timeout работает по принципу «чёрного ящика», то есть не требует какой-либо настройки самих процессов.
Обратите внимание, что данный скрипт не является одноимённой программой timeout из coreutils — это две разные программы.
Ещё нужно обязательно упомянуть Cgroups (Control Groups), которая контролирует потребление ресурсов системы на уровне ядра. По сравнению с рассматриваемым скриптом timeout, Cgroups сложнее в использовании, но и возможностей там больше.
Как установить timeout
Для работы скрипта на вашей системе Linux нужен установленный Perl 5 и смонтированная файловая система /proc.
Для проверки версии Perl на вашей системе Linux запустите следующую команду:
Теперь нужно скачать сам скрипт — можно клонировать весь репозиторий https://github.com/pshved/timeout или скачать всего один файл:
Поскольку у меня установлена программа timeout из пакета coreutils, то чтобы не вызывать путаницу, я не стал копировать этот скрипт в системную директорию исполнимых файлов. Поэтому я буду вызывать программу по относительному пути так (когда нахожусь в директории со скриптом):
Также программу можно вызывать по абсолютному пути (независимо от вашей текущей рабочей папки) — но у вас путь до файла будет другим:
Опции timeout:
Базовыми опциями являются:
- -t T — устанавливает лимит времени CPU+SYS на T секунд
- -m M — устанавливает лимит времени виртуальной памяти на M килобайт
- TIMEOUT_IDSTR переменная_окружения — строка добавляемая к сообщению о нарушении лимитов использования ресурсов (для разграничения от строк, печатаемых самой командой). Само сообщение может быть:
- TIMEOUT — лимит времени закончился
- MEM — лимит памяти израсходован
- HANGUP — обнаружено зависание (смотрите ниже)
- SIGNAL — процесс timeout был убит сигналом
После этого сообщения печатается количество секунд, которое проработал процесс.
Как ограничить время выполнения программы (нагрузку на процессор)
Для ограничения времени выполнения используется опция -t после которой указывается количество секунд, которое должен проработать скрипт. Пример ограничения работы четыремя секундами:
В выводе показана статистика использования процессора и памяти. Обратите внимание, что имеется ввиду процессорное время, то есть нагрузка на ЦПУ. Чтобы разница была более понятной, посмотрите на следующий пример:
Он проработает не 4 секунды, а 20 секунд, поскольку нагрузка на процессор отсутствует. В выводе будет показано:
Как ограничить потребление памяти
В следующем примере программа будет работать любое количество времени, но если она её потребление ресурсов превысит 10 гигабайт памяти, то она будет остановлена:
Посмотрите на скриншот, на нём видно, как программа постепенно увеличивала количество занятой памяти, а потом была завершена из-за превышения лимита:
Как ограничить использование процессорного времени и памяти
В следующем примере количество используемой памяти ограничено 1 гигабайтом и процессорное время ограничено 9 секундами:
Как можно увидеть, было потреблено менее трёх секунд процессорного времени, а программа была завершена из-за превышения лимита памяти.
Ограничение нагрузки на процессор с множеством коротких дочерних процессов
То есть программа timeout успешно подсчитывает не только ресурсы основного процесса, но и дочерних процессов.
Продвинутые опции
- -p .*regexp1.*,ИМЯ1;.*regexp2.*,ИМЯ2 — собирает статистику для дочерних процессов с указанными командами. ИМЕНА определяют сегменты, а regexps (регулярные выражения в формате Perl) определяют совпадение дочерних процессов, которые попадают в эти сегменты.
Если шаблон начинается с CHILD:, тогда в эту категорию собирается информация о работе дочерних совпадающих процессах (поиск совпадений выполняется по остальному шаблону). Обратите внимание, что это единственный способ собрать статистику потреблённого времени дочерними процессами, которые длятся только доли секунды. - -o файл_вывода — файл для сброса статистики сегментов, собранной опцией -p
- —detect-hangups — выключить выявление зависаний. Если вы указали фрагмент опцией -p, тогда если CPU время в любом из фрагментов не увеличивается во время некоторого времени, то скрипт timeout приходит к выводу, что контролируемый процесс завис и выключает его.
- —no-info-on-success — отключает вывод статистики использования если контролируемый процесс успешно завершил работу.
- —confess, -c — при выключении контролируемого процесс возвращает его код выхода или сигнал+128. Это также приводит к тому, что timeout ожидает пока контролируемый процесс не завершиться. Без этой опции скрипт возвращает толь.
- —memlimit-rss, -s — монитор лимита памяти RSS (resident set size)
Сбор информации о «тяжёлых» процессах:
Сбор статистики о «лёгких» дочерних процессах
В этом шаблоне легковесные дочерние процессы должны отслеживаться с помощью специального префикса CHILD:, сравните предыдущую команду и эту:
Почему остальные не показаны в статистике? Все процессы запускаются из Perl, но короткоживущие не отслеживаются в полной мере, поскольку timeout не просыпается достаточно часто.
Выявление зависаний в программе:
Более простой пример для остановки процесса, если он завис:
Итак, скрипт timeout — это простая программа для мониторинга потребления ресурсов, которая ограничивает потребление процессорного времени и памяти любой программы в Linux, она умеет выявлять зависания и подсчитывать статистику, в том числе с учётом дочерних процессов, а также отдельно для дочерних процессов.
Источник