TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #207 11.8K
Привет. Давно не виделись, конец года, все как с ума посходили, всем нужно вчера и срочно. Надеюсь у тебя тоже все хорошо. Сегодня поделюсь задачей которую решал на днях для клиента, связанную со swap.

Задача от заказчика: У меня есть приложение, которое уходит в swap, мне нужно чтобы оно туда не уходило. Сам swap отключать нельзя.

Задаю очевидный вопрос — а зачем? Чтобы что? Ну свапится оно, ну и пусть свапится, никогда с этим проблем ни у кого не встречал.

Как оказалось, они там провели у себя какие-то хитрые тесты и доказали, что если их приложение начинает свапится, то это влияет на скорость его работы. Ну да, есть в этом доля правды. Если на сервере достаточно RAM, можно и реализовать это безобразие.

А решается эта задача через cgroups.

cgroups (Control Groups) представляют собой механизм в ядре Linux для ограничения, изоляции и управления ресурсами, предоставляемыми группам процессов. Они предоставляют интерфейс для создания и управления группами процессов, а затем накладывают ограничения на ресурсы, потребляемые этими группами.

Сначала ставим необходимые пакеты, если они не стоят:

apt-get install cgroup-tools


Создаем отдельную группу asshole, в нее будем добавлять приложения, которые нужно оградить от swap:

cgcreate -g memory,cpu:/asshole


Запрещаем вытеснять процессы в swap:

echo 0 | tee /sys/fs/cgroup/asshole/memory.swap.max


Добавляем процесс в группу asshole:

cgclassify -g memory,cpu:/asshole/ $(pidof nginx)


Для примера я добавил nginx, который не будет уходить в swap. Но ты можешь добавить все что угодно.

Дополнительно для группы asshole отключим OOM:

echo 1 | tee /sys/fs/cgroup/asshole/memory.oom.group


Вот и всё, теперь приложение не будет уходить в swap и OOM (Linux Out-Of-Memory Killer) обломается. Ну и как вариант: всё нахуй встанет раком, продакшен издаст последний вздох и упадет в новогодние праздники. Но тут, как говорится — хозяин барин! Хотели отключить, отключили.

Все настройки производились на ubuntu 22.04, в других версиях есть различия на названия memory.swap.max, memory.oom.group и прочее.

После создания группы, зайди, посмотри что у тебя там создалось. И от туда уже пляши. У меня этот способ не сработал на виртуальных серверах в Селектеле (permissions denied), но прекрасно сработал в Digital Ocean и на локальной виртуалке.

Экспериментируйте! Кстати после перезагрузки, cgroups слетят и по возможности создавай юнит в systemd, типа такого:

/etc/systemd/system/asshole.service

[Unit]
Description=My cgroup configuration

[Service]
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/asshole
ExecStartPre=/bin/mount -t cgroup -o memory asshole /sys/fs/cgroup/asshole
ExecStart=/bin/echo 1 > /sys/fs/cgroup/asshole/memory.oom.group

[Install]
WantedBy=default.target


systemctl daemon-reload
systemctl start asshole
systemctl enable asshole


Хорошего понедельника! И всегда помни, если что-то ограничиваешь, рано или поздно оно взбунтуется и сделает уйму головняков.

tags: #linux
—
💩 @bashdays
More from @bashdays
  1. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  2. Sep 24, 2026Post #1565
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  5. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →