Амбициозные проекты, удалёнка и рост в сфере DevOps — звучит как работа мечты! Отправляйте резюме до 8 июня и присоединяйтесь к команде YADRO! 🧑💻
Как получить оффер за 3 дня? Подробности на карточках выше — листайте!
Оставляйте заявку — мы ждём именно вас!
Как получить оффер за 3 дня? Подробности на карточках выше — листайте!
Оставляйте заявку — мы ждём именно вас!
❤1
Тихие подвисания через zombie TCP connections: почему idle-сессии могут убивать сервис
Всё вроде работает: соединение открыто, но данных нет, новых клиентов не пускает. Вы перезапускаете сервис — и всё ок. Через день — снова. Причина может быть в зомби-TCP-соединениях.
В чём проблема
Если приложение не настраивает таймауты — такие подключения висят неделями и занимают ресурсы.
Как заметить
Ищите timer:(on, x ms, y retrans) — это таймеры ядра. Если timer:(keepalive,...) или timer:(on,...) висят слишком долго — это подозрительно.
Решение — настраиваем TCP Keepalive
Добавьте в sysctl:
Это значит: спустя 60 секунд без активности начнутся keepalive-пробы. Если за 75 секунд клиент не ответил — соединение будет закрыто.
Ещё лучше — на уровне приложения
Например, для Nginx:
Для PostgreSQL через tcp_keepalives_* в конфиге или переменных окружения.
Всё вроде работает: соединение открыто, но данных нет, новых клиентов не пускает. Вы перезапускаете сервис — и всё ок. Через день — снова. Причина может быть в зомби-TCP-соединениях.
В чём проблема
Некоторые клиенты (особенно IoT, нестабильные мобильные сети или старые прокси) теряют соединение без корректного FIN или RST. С точки зрения ядра, соединение всё ещё открыто.
Если приложение не настраивает таймауты — такие подключения висят неделями и занимают ресурсы.
Как заметить
ss -o state established '( dport = :http or dport = :ssh )'
Ищите timer:(on, x ms, y retrans) — это таймеры ядра. Если timer:(keepalive,...) или timer:(on,...) висят слишком долго — это подозрительно.
Решение — настраиваем TCP Keepalive
Добавьте в sysctl:
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
Это значит: спустя 60 секунд без активности начнутся keepalive-пробы. Если за 75 секунд клиент не ответил — соединение будет закрыто.
Ещё лучше — на уровне приложения
Например, для Nginx:
keepalive_timeout 15s;
Для PostgreSQL через tcp_keepalives_* в конфиге или переменных окружения.
👍17❤5
Любой сбой инфраструктуры = простои, потери и размытая репутация.
Но классические платформы виртуализации сегодня либо сложные, либо дорогие, либо не отвечают новым требованиям к отказоустойчивости и управляемости. Есть ли альтернатива?
Расскажем и покажем на деле:Вебинар «Точка устойчивости ИТ: почему HCI не только про “проще”, но и про “надёжнее”»
Что вы узнаете:
🔸Почему гиперконвергентная инфраструктура действительно может выигрывать у классических решений
🔸Как снизить затраты времени, ресурсов и усилий на поддержку
🔸Живое демо: веб-интерфейс vStack — управление инфраструктурой без лишней сложности
🔸Анонс новых возможностей — для тех, кто хочет быть на шаг впереди
🔸Открытый Q&A: разберём ваши кейсы, ответим на вопросы
Когда: 10.06 в 11.00
ЗАРЕГИСТРИРОВАТЬСЯ
Но классические платформы виртуализации сегодня либо сложные, либо дорогие, либо не отвечают новым требованиям к отказоустойчивости и управляемости. Есть ли альтернатива?
Расскажем и покажем на деле:Вебинар «Точка устойчивости ИТ: почему HCI не только про “проще”, но и про “надёжнее”»
Что вы узнаете:
🔸Почему гиперконвергентная инфраструктура действительно может выигрывать у классических решений
🔸Как снизить затраты времени, ресурсов и усилий на поддержку
🔸Живое демо: веб-интерфейс vStack — управление инфраструктурой без лишней сложности
🔸Анонс новых возможностей — для тех, кто хочет быть на шаг впереди
🔸Открытый Q&A: разберём ваши кейсы, ответим на вопросы
Когда: 10.06 в 11.00
ЗАРЕГИСТРИРОВАТЬСЯ
❤1🤔1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
PSI не измеряет загрузку напрямую — он измеряет «stall time» — сколько процессов одновременно не могли продолжить работу из-за нехватки ресурса. Это дает более реалистичную картину деградации системы.
Проверка PSI осуществляется через:
cat /proc/pressure/cpu
cat /proc/pressure/memory
cat /proc/pressure/io
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤4
Вышла VirtualBox 7.1.10
Oracle выпустила обновление VirtualBox 7.1.10 — кроссплатформенной системы виртуализации. Пакеты доступны для Linux (включая RHEL, Fedora, Ubuntu и др.), macOS и Windows.
Что нового:
• Поддержка ядра Linux 6.15 и предварительная — 6.16
• Исправления для Oracle UEK8 и модулей на Linux
• Устранены краши VM Selector из-за отсутствующих libdl.so и libpthread.so
• На Windows устранены ошибки со звуком и VBoxManage
• Починен буфер обмена при доступе через RDP
Полный список изменений — в changelog Oracle.
Oracle выпустила обновление VirtualBox 7.1.10 — кроссплатформенной системы виртуализации. Пакеты доступны для Linux (включая RHEL, Fedora, Ubuntu и др.), macOS и Windows.
Что нового:
• Поддержка ядра Linux 6.15 и предварительная — 6.16
• Исправления для Oracle UEK8 и модулей на Linux
• Устранены краши VM Selector из-за отсутствующих libdl.so и libpthread.so
• На Windows устранены ошибки со звуком и VBoxManage
• Починен буфер обмена при доступе через RDP
Полный список изменений — в changelog Oracle.
❤9👍3
k8sGPT — ваш ИИ-ассистент для Kubernetes — CLI-утилита, которая помогает диагностировать проблемы в Kubernetes.
Полезна и при онбординге, и в проде: показывает ошибки ресурсов, объясняет, почему они возникли, и предлагает возможные шаги.
В видео:
- Как работает диагностика
- Сравнение OpenAI и cohere
- Примеры реальных кейсов
Узнайте, как внедрить утилиту в свой workflow →
#реклама
О рекламодателе
Полезна и при онбординге, и в проде: показывает ошибки ресурсов, объясняет, почему они возникли, и предлагает возможные шаги.
В видео:
- Как работает диагностика
- Сравнение OpenAI и cohere
- Примеры реальных кейсов
Узнайте, как внедрить утилиту в свой workflow →
#реклама
О рекламодателе
❤4
Перехват stdout/stderr у systemd-сервиса в рантайме: без перезапуска и strace
Иногда вам нужно отладить запущенный systemd-сервис, чтобы понять, что он пишет в stdout или stderr, но:
– сервис уже работает,
– логи в journald запаздывают или отфильтрованы,
– вы не хотите/не можете использовать strace.
Что делать?
1️⃣ Ищем дескрипторы вывода
Узнаём PID процесса:
Идём в /proc/<PID>/fd/ — смотрим, куда пишется stdout (обычно fd 1) и stderr (обычно fd 2):
Может быть что-то вроде:
2️⃣ Если это сокет — дублируем вывод
Можно аккуратно “подключиться” к этому дескриптору с помощью socat, если он всё ещё живой:
Или, если это пайп или лог-файл — можно открыть его напрямую и читать в реальном времени:
3️⃣ Переоткрытие stdout/stderr без перезапуска
Иногда вы хотите временно направить stdout/err в другой файл (например, в отладочный лог). Если приложение не закрывает дескрипторы, можно сделать:
Это дублирует вывод в debug.log. Подходит не для всех случаев, но может сработать.
Иногда вам нужно отладить запущенный systemd-сервис, чтобы понять, что он пишет в stdout или stderr, но:
– сервис уже работает,
– логи в journald запаздывают или отфильтрованы,
– вы не хотите/не можете использовать strace.
Что делать?
Узнаём PID процесса:
systemctl show -p MainPID your-service
Идём в /proc/<PID>/fd/ — смотрим, куда пишется stdout (обычно fd 1) и stderr (обычно fd 2):
ls -l /proc/<PID>/fd/1
Может быть что-то вроде:
/proc/<PID>/fd/1 -> /dev/null
или -> socket:[12345]
или -> /run/log/journal/...
Можно аккуратно “подключиться” к этому дескриптору с помощью socat, если он всё ещё живой:
socat -u ABSTRACT-CONNECT:your-socket - | cat
Или, если это пайп или лог-файл — можно открыть его напрямую и читать в реальном времени:
tail -f /run/log/your-app.log
Иногда вы хотите временно направить stdout/err в другой файл (например, в отладочный лог). Если приложение не закрывает дескрипторы, можно сделать:
exec 3>/tmp/debug.log
sudo tee /proc/<PID>/fd/1 >/dev/null <&3
Это дублирует вывод в debug.log. Подходит не для всех случаев, но может сработать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6
Что делает machinectl shell в системе с systemd-nspawn?
Anonymous Quiz
6%
Подключает к удалённой машине через SSH
10%
Запускает chroot-сессию
82%
Открывает интерактивную оболочку внутри контейнера systemd-nspawn
1%
Запускает Docker
🤷♂10❤2
IT-челлендж Слёрма — проверь свой скилл!
5 дней — 5 тем для IT-инженеров уровня Middle:
▪️ Bash / Linux / DevOps
▪️ Сети
▪️ CI/CD, Docker, Jenkins
▪️ SQL и базы данных
▪️ Информационная безопасность
🔺Короткие, но умные задания в Google Формах
🔺Удобный Telegram-бот ведёт по шагам
🔺Занимает не больше 15–20 минут в день
Подарки победителям:
Подписка на курсы Слёрма
Курс «Администрирование Linux»
Курс «Ansible: Infrastructure as Code»
🎫 30% скидка всем, кто дойдёт до конца
📅 Челлендж с 16 по 20 июня
📍 Регистрация в боте до 15 июня
5 дней — 5 тем для IT-инженеров уровня Middle:
▪️ Bash / Linux / DevOps
▪️ Сети
▪️ CI/CD, Docker, Jenkins
▪️ SQL и базы данных
▪️ Информационная безопасность
🔺Короткие, но умные задания в Google Формах
🔺Удобный Telegram-бот ведёт по шагам
🔺Занимает не больше 15–20 минут в день
Подарки победителям:
Подписка на курсы Слёрма
Курс «Администрирование Linux»
Курс «Ansible: Infrastructure as Code»
🎫 30% скидка всем, кто дойдёт до конца
📅 Челлендж с 16 по 20 июня
📍 Регистрация в боте до 15 июня
❤3👍1👎1
Диагностика high-load без perf и strace: ps + procfs как минимум
Когда серверу плохо, а perf, strace и eBPF недоступны (или неуместны) — остаётся old school: ps, top и чтение /proc.
И это вполне достаточно, чтобы найти:
– кто грузит CPU и память,
– где залипли процессы,
– кто блокирует I/O и тормозит остальных.
1️⃣ Кто грузит CPU?
Проверяем самых голодных:
Или top -H — если процесс многопоточный (например, Java или nginx), смотрим нагрузку по тредам.
2️⃣ Что делают эти процессы?
Находим PID и лезем в /proc/<pid>/:
Смотрим состояние (Running, Sleeping, Zombie) и потребление памяти.
Читаем cmdline и cwd:
3️⃣ Что с диском?
Находим процессы с активным I/O:
Или вручную:
Можно отследить, кто грузит диск даже без iotop.
4️⃣ Где залипли?
Иногда процессы висят в ожидании ресурсов. Смотрим wchan:
wchan показывает, где «спит» поток: например, futex_wait_queue_me (ожидание мьютекса) или unix_stream_recvmsg (чтение из сокета).
5️⃣ Кто кого держит?
Смотрим locks:
Или проверяем открытые файлы:
Быстро даёт понять, кто блокирует файл или ждёт освобождения сокета/канала.
6️⃣ А если нагрузка прыгает?
Снимаем срез каждые 5 секунд:
Можно обернуть в watch или bash-циклы для простейшего мониторинга.
Когда серверу плохо, а perf, strace и eBPF недоступны (или неуместны) — остаётся old school: ps, top и чтение /proc.
И это вполне достаточно, чтобы найти:
– кто грузит CPU и память,
– где залипли процессы,
– кто блокирует I/O и тормозит остальных.
Проверяем самых голодных:
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head
Или top -H — если процесс многопоточный (например, Java или nginx), смотрим нагрузку по тредам.
Находим PID и лезем в /proc/<pid>/:
cat /proc/<pid>/status | grep -E 'State|VmRSS'
Смотрим состояние (Running, Sleeping, Zombie) и потребление памяти.
Читаем cmdline и cwd:
tr '\0' ' ' < /proc/<pid>/cmdline
ls -l /proc/<pid>/cwd
Находим процессы с активным I/O:
iotop -o # если доступен
Или вручную:
grep -r . /proc/*/io | grep read_bytes | sort -nk2 | tail
Можно отследить, кто грузит диск даже без iotop.
Иногда процессы висят в ожидании ресурсов. Смотрим wchan:
ps -eo pid,wchan:30,cmd | grep -v -E '^\s*PID' | grep -v running
wchan показывает, где «спит» поток: например, futex_wait_queue_me (ожидание мьютекса) или unix_stream_recvmsg (чтение из сокета).
Смотрим locks:
cat /proc/locks
Или проверяем открытые файлы:
ls -l /proc/<pid>/fd/
Быстро даёт понять, кто блокирует файл или ждёт освобождения сокета/канала.
Снимаем срез каждые 5 секунд:
while true; do ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | head -n 10; sleep 5; clear; done
Можно обернуть в watch или bash-циклы для простейшего мониторинга.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤5
🚀⭐️ Разберётесь, как работают стандартные потоки в Linux и научитесь управлять вводом, выводом и ошибками в терминале
👉 Приглашаем на вебинар: Управление потоками ввода и вывода в Linux
На вебинаре вы узнаете:
— Что такое стандартные потоки ввода, вывода и ошибок
— Как перенаправлять потоки с помощью >, >>, <, 2>, | и других операторов
— Как использовать пайпы (конвейеры) для обработки данных в командной строке
— Как комбинировать команды, управлять выводом и создавать эффективные цепочки
В результате вебинара вы:
— Научитесь различать и использовать stdin, stdout и stderr
— Сможете перенаправлять потоки и использовать их в сценариях автоматизации
— Попробуете строить пайплайны и обрабатывать данные без создания временных файлов
— Поймёте, как вывод ошибок и данных влияет на поведение скриптов и программ.
🎁 Урок пройдет в преддверие старта курса «Administrator Linux. Basic». Все участники вебинара получат скидку на обучение.
👉 Для участия зарегистрируйтесь: https://tglink.io/74c432635c2b?erid=2W5zFJYUFAx
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
👉 Приглашаем на вебинар: Управление потоками ввода и вывода в Linux
На вебинаре вы узнаете:
— Что такое стандартные потоки ввода, вывода и ошибок
— Как перенаправлять потоки с помощью >, >>, <, 2>, | и других операторов
— Как использовать пайпы (конвейеры) для обработки данных в командной строке
— Как комбинировать команды, управлять выводом и создавать эффективные цепочки
В результате вебинара вы:
— Научитесь различать и использовать stdin, stdout и stderr
— Сможете перенаправлять потоки и использовать их в сценариях автоматизации
— Попробуете строить пайплайны и обрабатывать данные без создания временных файлов
— Поймёте, как вывод ошибок и данных влияет на поведение скриптов и программ.
🎁 Урок пройдет в преддверие старта курса «Administrator Linux. Basic». Все участники вебинара получат скидку на обучение.
👉 Для участия зарегистрируйтесь: https://tglink.io/74c432635c2b?erid=2W5zFJYUFAx
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
❤2
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
exec() — это семейство функций (execl, execp, execve и др.), которое заменяет текущий процесс на новый, загружая в его адресное пространство другую программу. После вызова exec() оригинальный код процесса больше не выполняется — он полностью замещается. Это удобно, если вы после fork() хотите в дочернем процессе запустить другую программу (что и делает большинство шеллов при запуске команд).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4👍1
Живая миграция LXC-контейнера с минимальным downtime: CRIU + rsync
Иногда нужно перенести LXC-контейнер на другой сервер без остановки сервисов внутри — например, при плановой миграции, апгрейде хоста или изменении инфраструктуры.
⏺ Подготовка контейнера
На обоих серверах должны быть:
•одинаковые версии LXC и CRIU (apt install criu lxc)
• идентичные ядра (или как минимум — поддержка CONFIG_CHECKPOINT_RESTORE)
• включён nesting и features.criu в конфиге LXC
Пример конфигурации:
⏺ Первый rsync контейнерной файловой системы
Копируем всё, кроме /proc, /sys, сокетов и временных данных:
⏺ Заморозка и снятие чекпоинта
На исходном сервере:
Ключ -s говорит заморозить (stop) контейнер после дампа.
⏺ Инкрементальный rsync чекпоинта и изменений
Это нужно, чтобы перенести изменения в файловой системе, произошедшие между первым rsync и чекпоинтом.
⏺ Восстановление контейнера
На целевом сервере:
Контейнер стартует с того же состояния, с которого был заморожен, включая открытые сокеты, процессы и даже ssh-сессии.
Иногда нужно перенести LXC-контейнер на другой сервер без остановки сервисов внутри — например, при плановой миграции, апгрейде хоста или изменении инфраструктуры.
С помощью CRIU (Checkpoint/Restore In Userspace) и rsync это возможно почти без прерывания работы.
На обоих серверах должны быть:
•одинаковые версии LXC и CRIU (apt install criu lxc)
• идентичные ядра (или как минимум — поддержка CONFIG_CHECKPOINT_RESTORE)
• включён nesting и features.criu в конфиге LXC
Пример конфигурации:
lxc.apparmor.profile = unconfined
lxc.mount.auto = proc:rw sys:rw
lxc.cap.drop =
lxc.cgroup.devices.allow = a
lxc.seccomp.profile = unconfined
Копируем всё, кроме /proc, /sys, сокетов и временных данных:
rsync -aAXv --exclude={"/proc/*","/sys/*","/dev/pts/*","/run/*","/tmp/*"} /var/lib/lxc/myct root@target:/var/lib/lxc/
На исходном сервере:
lxc-checkpoint -n myct -D /tmp/myct-ckpt -s
Ключ -s говорит заморозить (stop) контейнер после дампа.
rsync -aAXv /tmp/myct-ckpt root@target:/tmp/
rsync -aAXv /var/lib/lxc/myct/ root@target:/var/lib/lxc/myct/
Это нужно, чтобы перенести изменения в файловой системе, произошедшие между первым rsync и чекпоинтом.
На целевом сервере:
lxc-start -n myct -s -F -D --restore --directory=/tmp/myct-ckpt
Контейнер стартует с того же состояния, с которого был заморожен, включая открытые сокеты, процессы и даже ssh-сессии.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5👍1
Редактирование systemd-юнитов с rollback и временными изменениями
Иногда нужно изменить поведение systemd-сервиса, но:
– не хочется трогать /etc/systemd/system/*.service,
– правка временная или нужна только до следующей перезагрузки,
– важно быстро откатиться без git, ручного копирования и боли.
Решение — systemctl edit и friends.
1️⃣ Временные правки без записи на диск
Создаёт юнит-оверклайд в /run/systemd/system/ — изменения исчезнут после ребута. Идеально для тестов на проде.
Пример содержимого:
ExecStart= сначала сбрасывает оригинальную строку, затем задаётся новая.
2️⃣ Постоянные override-файлы, не трогая оригинал
Создаёт или редактирует /etc/systemd/system/my-service.service.d/override.conf. При обновлении пакета оригинальный юнит не затирается.
3️⃣ Проверка и rollback
Проверяем итоговый конфиг:
Откат:
Удаляет override-файлы и возвращает дефолт.
4️⃣ Перезапуск с атомарной подменой
Если правите в проде — перезапускайте юнит с минимальным downtime:
Или через socket activation (если настроено) — тогда сам сервис не нужен в момент старта, но запросы не теряются.
5️⃣ Подводные камни
– systemctl edit не валидирует синтаксис — можно легко сделать опечатку. Проверяйте через systemd-analyze verify.
– Если меняете ExecStart, не забудьте сначала сбросить его через ExecStart= без аргументов.
Иногда нужно изменить поведение systemd-сервиса, но:
– не хочется трогать /etc/systemd/system/*.service,
– правка временная или нужна только до следующей перезагрузки,
– важно быстро откатиться без git, ручного копирования и боли.
Решение — systemctl edit и friends.
systemctl edit --runtime my-service
Создаёт юнит-оверклайд в /run/systemd/system/ — изменения исчезнут после ребута. Идеально для тестов на проде.
Пример содержимого:
[Service]
Environment="DEBUG=1"
ExecStart=
ExecStart=/usr/bin/my-app --debug
ExecStart= сначала сбрасывает оригинальную строку, затем задаётся новая.
systemctl edit my-service
Создаёт или редактирует /etc/systemd/system/my-service.service.d/override.conf. При обновлении пакета оригинальный юнит не затирается.
Проверяем итоговый конфиг:
systemctl cat my-service
Откат:
systemctl revert my-service
Удаляет override-файлы и возвращает дефолт.
Если правите в проде — перезапускайте юнит с минимальным downtime:
systemctl daemon-reexec
systemctl try-restart my-service
Или через socket activation (если настроено) — тогда сам сервис не нужен в момент старта, но запросы не теряются.
– systemctl edit не валидирует синтаксис — можно легко сделать опечатку. Проверяйте через systemd-analyze verify.
– Если меняете ExecStart, не забудьте сначала сбросить его через ExecStart= без аргументов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤4👍4