Systemd CPUQuota не работает после интерактивного входа через sudo.

Вопрос или проблема

Проблема похожа на эту, но есть два нюанса.

  1. Если я переключаюсь на пользователя с помощью sudo -u testuser -i, а затем нагружаю процессор с помощью утилиты stress, CPUQuota не вступает в силу.

  2. Если я вхожу через SSH как testuser, запускаю какую-то ресурсоемкую задачу, то это работает как ожидалось.

Моя конфигурация CPUQuota

/etc/systemd/system.control/user-1003.slice.d/50-CPUQuota.conf

[Slice]
CPUQuota=33%
systemctl show -p DefaultCPUAccounting

DefaultCPUAccounting=yes

Дистрибутив: Debian 12 последний.
Ubuntu 22.04 также затронут этой проблемой.

Как мне отладить эту проблему, чтобы получить какие-либо подсказки?

Ответ или решение

Проблема, с которой вы столкнулись, действительно заслуживает внимания, так как она может негативно сказаться на производительности системы и способах управления ресурсами. Давайте подробно разберем несколько ключевых аспектов, чтобы выяснить, почему настройка CPUQuota не срабатывает при использовании команды sudo -u testuser -i в отличие от входа по SSH.

1. Понимание контекста работы с Systemd

Система инициализации systemd управляет ресурсами с помощью концепции "срезов" (slices). Каждому пользователю соответствуют определенные срезы, где могут применяться ограничения на использование ресурсов такие как CPU, память и т.д. В вашем случае вы настроили срез для пользователя с ID 1003, назначив ему CPUQuota=33%, но это правило работает не так, как вы ожидаете при использовани команд sudo.

2. Разница между режимами запуска

Когда вы входите в систему через SSH как testuser, systemd применяет все настройки, связанные с его срезом, включая CPUQuota. Однако, когда вы используете команду sudo -u testuser -i, вы, по сути, создаете новое окружение для пользователя, и это может привести к тому, что конфигурации среза не будут применяться должным образом. Эта команда не всегда создает полноценную сессию с правильной инициализацией срезов.

3. Отладка настройки CPUQuota

  • Проверка срезов: Сначала вам следует проверить, какой срез активен для testuser после выполнения команды sudo. Используйте команду:

    systemctl status user@1003.service

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

  • Логи и статус: Изучите журналы systemd, чтобы выявить какие-либо ошибки или предупреждения:

    journalctl -u user@1003.service

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

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

4. Альтернативные подходы

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

  • Использование systemd-run: Это может быть эффективным методом для запуска команд с определенными параметрами ограничений, как в примере:

    systemd-run --slice=user-1003.slice --property=CPUQuota=33% <ваша команда>
  • Проверка использования sudo: Убедитесь, что использование sudo правильно сконфигурировано и не имеет дополнительных ограничений, которые могут повлиять на ресурсы.

Заключение

Ваша ситуация со срезами и CPUQuota показывает, как важно понимать контексты, в которых выполняются команды в Linux. Правильное использование systemd и его функциональностей позволит вам эффективно управлять ресурсами на сервере. Надеюсь, эти шаги помогут вам диагностировать и решить проблему. Если у вас возникнут дальнейшие вопросы, не стесняйтесь задавать их.

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

Капча загружается...