Короткий ответ Ограничения задаются напрямую в unit-файле сервиса через директивы MemoryMax, CPUQuota (и аналогичные), которые systemd транслирует в соответствующую cgroup; cgroups v1 использует отдельные независимые иерархии для разных контроллеров (cpu, memory и т.д.), а cgroups v2 — единую унифицированную иерархию для всех контроллеров, что упрощает совместное применение лимитов и обязательно для некоторых современных функций (например, PSI-метрик). Как это работает подробнее При запуске сервиса systemd создаёт для него отдельную cgroup и записывает в соответствующие файлы контроллера (memory.max, cpu.max в v2) заданные лимиты; ядро затем физически ограничивает процесс и всех его потомков внутри этой cgroup, не позволяя превысить memory limit (при превышении срабатывает cgroup-level OOM killer) или дольше использовать CPU сверх заданной квоты (происходит throttling). Пример кода Что использовать на практике Практика. лимиты через systemd — простой и декларативный способ избежать ситуации 'шумного соседа',