Чтоб тебе такого интересного рассказать… а давайка я научу тебя весьма полезной теме. Сегодня будем резать аппетиты.
Создаем синтетику
Чмодим и запускаем. По итогу твой проц начинает хуярить как не в себя, выжирая на 100500% все свободные ресурсы. Хуита!
ㅤ
Давай это исправим и разрешим скрипту хуячить лишь на 50%.
Для начала проверяем, сможем ли мы это сделать
Если получил выхлоп, то в большинстве случаев у тебя всё получится.
Создадим клетку «bashdays.slice»:
Здесь мы включаем нужные контроллеры для дочерних директорий, запихиваем туда текущий shell и в последней строчке выставляем 50% для CPU.
Снова запускаем первый скрипт-пожиратель и наблюдаем как проц перестал хуярить как не в себя и ограничен теперь половинкой (50%). Отличная работа!
Аналогично можно сделать и с RAM и с IO.
Создаем еще одну синтетику:
Жрём память пачками по 100 МБ. Сначала увидишь замедление (reclaim), потом — пиздец! Нас выкинет локальный OOM, но только внутри cgroup, а не всей системы.
Посмотреть статистику в реальном времени:
Ну и давай посмотрим IO (тормозим винт и превращаем его в флешку USB1.1). Цель — мы хотим, чтобы процесс читал с диска не быстрее 10 МБ/с:
Узнаем major:minor:
Допустим, диск —
И запускаем:
Теперь твой винт начинает работать как древняя флешка, хотя железо у тебя современное.
Короче такие вот приколы! Изучай!
🛠 #linux #cgroup #debug
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Тема крайне полезная, бери на вооружение, однажды в хозяйстве однозначно сгодится.
Создаем синтетику
#!/bin/bash
while :; do :; done
Чмодим и запускаем. По итогу твой проц начинает хуярить как не в себя, выжирая на 100500% все свободные ресурсы. Хуита!
ㅤ
Давай это исправим и разрешим скрипту хуячить лишь на 50%.
Для начала проверяем, сможем ли мы это сделать
mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers
Если получил выхлоп, то в большинстве случаев у тебя всё получится.
Создадим клетку «bashdays.slice»:
sudo su
cd /sys/fs/cgroup
mkdir bashdays.slice
echo "+cpu +memory +io" > cgroup.subtree_control
cd bashdays.slice
echo $$ > cgroup.procs
echo "50000 100000" > cpu.max
Здесь мы включаем нужные контроллеры для дочерних директорий, запихиваем туда текущий shell и в последней строчке выставляем 50% для CPU.
Снова запускаем первый скрипт-пожиратель и наблюдаем как проц перестал хуярить как не в себя и ограничен теперь половинкой (50%). Отличная работа!
Что такое cgroups — это такая комната наказаний в ядре Linux. Ты создаёшь группу процессов, ядро начинает следить за их CPU, памятью, диском, IO и карать, если они жрут больше положенного.
Аналогично можно сделать и с RAM и с IO.
echo $((512*1024*1024)) > memory.max
Создаем еще одну синтетику:
#!/bin/bash
blocks=()
while true; do
blocks+=("$(head -c 104857600 </dev/zero | tr '\0' 'A')")
echo "Allocated ${#blocks[@]}00 MB"
sleep 1
done
Жрём память пачками по 100 МБ. Сначала увидишь замедление (reclaim), потом — пиздец! Нас выкинет локальный OOM, но только внутри cgroup, а не всей системы.
Посмотреть статистику в реальном времени:
cat memory.current
cat memory.events
Ну и давай посмотрим IO (тормозим винт и превращаем его в флешку USB1.1). Цель — мы хотим, чтобы процесс читал с диска не быстрее 10 МБ/с:
Узнаем major:minor:
lsblk --output NAME,MAJ:MIN
Допустим, диск —
8:0 (типичное для /dev/sda).echo "8:0 rbps=10485760" > io.max
И запускаем:
#!/bin/bash
dd if=/dev/sda of=/dev/null bs=1M
Теперь твой винт начинает работать как древняя флешка, хотя железо у тебя современное.
Кстати это отличные способы заподлостроения либо как вариант подойдут для технических собеседований.
Например, говоришь кандидату — найди почему тормозит винт, либо — объясни почему скрипт жрет 50% процессора, а не 100%. Сразу вычислишь бродяг вайтишных, им даже ГПТ не поможет.
Короче такие вот приколы! Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 74