Ограничение ресурсов сессий пользователя

В STAL поддерживается задание ограничений на используемые ресурсы сессий пользователя: память, процессор, количество процессов и задач, работа с сетью. Ограничения задаются в конфигурационном файле /etc/stal/limits.json, по умолчанию применяются настройки секции «default».

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

Пример конфигурационного файла после установки STAL:

{
    "default": {
        "cpu:weight": 0,
        "cpu:quota": 0,
        "memory:high": "",
        "memory:max": "",
        "tasks:max": 0,
        "network:deny": "",
        "network:allow": ""
    },

    "groups": [
        {
            "name": "test-admins",
            "cpu:weight": 0,
            "cpu:quota": 0,
            "memory:high": "",
            "memory:max": "",
            "tasks:max": 1024
        },
        {
            "name": "test-users",
            "cpu:weight": 0,
            "cpu:quota": 20,
            "memory:high": "2G",
            "memory:max": "3G",
            "tasks:max": 256
        }
    ],

    "users": [
        {
            "name": "vasyan",
            "cpu:weight": 0,
            "cpu:quota": 3,
            "memory:high": "1G",
            "memory:max": "2G",
            "tasks:max": 128,
            "network:deny": "any",
            "network:allow": "localhost"
        }
    ]
}
BASH

Конфигурационный файл содержит секции:

  • «default»: задает ограничения по умолчанию;
  • «groups»: задает ограничения пользователя, если он состоит в указанной группе;
  • «users»: задает ограничения пользователя.

Список доступных параметров конфигурационного файла /etc/stal/limits.json приведен в таблице.

Подробную информацию по используемым значениям параметров системы управления службами systemd можно получить по ссылке: https://www.freedesktop.org/software/systemd/man/latest/systemd.resource-control.html.


Описание параметров файла конфигурации limits.json

ПараметрНазначение
nameИмя группы или пользователя, к которому будут применены ограничения

cpu:weight

Соответствует параметру «CPUWeight» в системе управления службами systemd.

Разрешенные значения от 1 до 10000, по умолчанию systemd задает 100.

Значение «0»: функциональность не используется.

cpu:quota

Соответствует параметру «CPUQuota» в системе управления службами systemd.

Значение указывается в процентах на одно ядро процессора.

Значение «0»: функциональность не используется

memory:high

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

Соответствует параметру «MemoryHigh» в системе управления службами systemd.

Значение задается в байтах. Также могут быть использованы суффиксы:

  • K - килобайт, например: 1K;
  • M - мегабайт, например: 1M;
  • G - гигабайт, например: 1G;
  • T - терабайт, например: 1T.

Значение не задано: параметр и функциональность не используются

memory:max

Абсолютное ограничение использования памяти выполняемыми процессами. Если ограничение превышается, будет вызвано системное средство устранения нехватки памяти. 

Соответствует параметру «MemoryMax» в системе управления службами systemd.

Значения задаются аналогично параметру memory:high.

Значение не задано: функциональность не используется

tasks:max

Максимальное количество задач, которые можно создать для сессии. 

Соответствует параметру «TasksMax» в системе управления службами systemd.

Значение «0»: функциональность не используется

network:deny

Соответствует параметру «IPAddressDeny» в системе управления службами systemd.

В качестве значений можно указывать:

  • разделенный пробелами список IP-адресов, каждый из которых может иметь значение маски после символа «/», например: 192.0.2.1/24;
  • символическое имя «any»: любой узел;
  • символическое имя «localhost»: локальный узел;
  • символическое имя «link-local»: все локальные IP-адреса;
  • символическое имя «multicast»: все IP-адреса многоадресной рассылки.

Значение не задано: функциональность не используется

network:allow

Соответствует параметру «IPAddressAllow» в системе управления службами systemd. Значения задаются аналогично параметру network:deny.

Значение не задано: функциональность не используется

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

sudo loginctl list-sessions
sudo systemctl show session-SID.scope
sudo systemctl show user-UID.slice
BASH

где:

SID - идентификатор сессии пользователя;

UID - идентификатор пользователя.