Ограничить расход процессора и памяти всех приложений X

Я бы попробовал Mopidy .

Mopidy - это музыкальный сервер, который может воспроизводить музыку как из нескольких источников, таких как локальный жесткий диск, радиопотоки, так и из Spotify и SoundCloud. Поиск объединяет результаты из всех музыкальных источников, и вы можете смешивать треки из всех источников в вашей очереди воспроизведения. Ваши плейлисты из Spotify или SoundCloud также доступны для использования.

В нем Spotify указан как одна из поддерживаемых служб.

Mopidy - это музыкальный сервер, который может воспроизводить музыку как из нескольких источников, таких как локальный жесткий диск, радиопотоки, так и из Spotify и SoundCloud.

В нем также есть подробные сведения для его установки на Rasp Pi .

Mopidy прекрасно работает на Raspberry Pi. С января 2013 года Mopidy будет работать с поддержкой Spotify как на архитектурах armel (soft-float), так и на armhf (hard-float), включая дистрибутив Raspbian.

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

3
26.12.2018, 14:38
1 ответ

Я использую Debian, поэтому решение основано на systemdреализации cgroup.

Первым шагом является проверка иерархии cgroups:

> systemd-cgls
-.slice
├─user.slice
│ └─user-1000.slice
│   ├─user@1000.service
.....
│   └─session-2.scope
│     ├─1376 lightdm --session-child 14 21
│     ├─1400 x-window-manager
.....

systemdавтоматически назначает контрольные группы терминальным сеансам. В иерархии cgroup нам нужно определить, в какой session-*.scopeесть X приложений. Номер области сеанса X по умолчанию всегда один и тот же.

Чтобы установить ограничение памяти для всех программ в области, введите

> systemctl set-property session-2.scope MemoryLimit=14G

Эта команда устанавливает лимит памяти для сеанса 2 до перезагрузки.

Чтобы сделать это правило постоянным, запустите

> sudo systemctl edit session-2.scope

в текстовом редакторе введите

[Scope]
MemoryLimit=14G

и сохраните. Это правило будет сохраняться между перезагрузками. Другие лимиты ресурсов могут быть установлены в том же файле.


Редактировать

Как указал Дероберт, не гарантируется, что номер области сеанса X будет одинаковым. Более надежным решением является определение этого числа во время выполнения.

Файл/usr/local/bin/resource_limit.sh:

#!/bin/bash

for s in $(systemd-cgls --no-pager --user-unit \
           | grep --extended-regexp --only-matching \
              'session-.{1,3}\.scope');do
    systemctl set-property --runtime "$s" MemoryLimit="$1"
done

Файл/etc/systemd/system/resource_limit.service:

[Unit]
Description=Limit resources
Requires=multi-user.target
After=multi-user.target

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/resource_limit.sh 14G
ExecStop=/usr/local/bin/resource_limit.sh 20G
RemainAfterExit=true

[Install]
WantedBy=graphical.target

Скопируйте указанные выше файлы в свою систему и введите команду

systemctl daemon-reload

После этого вы можете установить заданный лимит (в данном случае 14G )с помощью команды

systemctl start resource_limit.service

и снимите его (установив более высокое предельное значение )с помощью команды

systemctl stop resource_limit.service

Для автоматического запуска этого сценария при перезагрузке введите команду

systemctl enable resource_limit.service

Примечание 1

Если ваш X-сеанс запускается недостаточно быстро, вы можете увеличить задержку обслуживания с помощью ExecStartPreили включить обслуживание вручную.

Примечание 2

Рекомендуется также добавить ограничения к user@1000.service(, где 1000 -— это UID )с немного большим ограничением.Таким образом, у вас всегда будут ресурсы, доступные для системных демонов.

4
27.01.2020, 21:24

Теги

Похожие вопросы