
- Главная
- Каталог
- Интернет технологии
- LinuxCamp | DevOps
LinuxCamp | DevOps
Авторский канал, на котором говорим про разработку, Linux, DevOps, сети и администрирование.
Статистика канала
sudo apt install bottom{}
После установки утилита запускается командой btm.
Как работает
При запуске btm открывает интерактивный интерфейс с несколькими блоками: CPU, память, swap, диск, сеть, список процессов. Блоки можно скрывать, менять их порядок и переключать режимы отображения с клавиатуры, без редактирования конфигов.
btm{}
Для серверов и Docker-хостов полезен режим с упором на процессы и нагрузку, где видно PID, пользователя, потребление CPU и памяти в реальном времени.
btm -b{}
Все настройки сохраняются в конфигурационном файле, который можно использовать одинаково на разных машинах.
Вывод
bottom - это интерактивный мониторинг системы в терминале с расширенной визуализацией и настройкой интерфейса. Подходит для личного пользования и постоянного контроля ресурсов без GUI-инструментов.
LinuxCamp | #utils
sudo apt install hyperfine{}
После установки команда hyperfine доступна без дополнительной настройки.
Базовое использование
Простейший случай это замер одной команды. hyperfine сам выполнит несколько прогонов и выведет агрегированную статистику.
hyperfine "ls -R /usr/share >/dev/null"{}
Чаще всего утилиту используют для сравнения нескольких вариантов одной и той же операции, например разных реализаций или флагов.
hyperfine "grep -R foo ." "rg foo ."{}
В этом режиме вывод сразу показывает разницу по времени и разброс значений, что удобно для принятия технических решений.
Вывод
hyperfine предназначен для воспроизводимых замеров производительности команд. Подходит для сравнения CLI-утилит, флагов запуска, скриптов и небольших изменений в пайплайнах, где важно видеть реальные цифры, а не разовый запуск через time.
LinuxCamp | #utils
ExecStartPre=
ExecStart=
ExecStartPost={}
Важно: если ExecStartPre вернёт non-zero, то сервис не запустится вообще.
Самая частая ловушка
Pre-хук выглядит безопасным, но падает:
ExecStartPre=/usr/bin/curl http://127.0.0.1:9000/health{}
Если сервис на 9000 ещё не поднят, curl вернёт код ошибки, systemd считает, что сервис сломан, и даже не дойдёт до ExecStart. Pre-хук выполняется каждый раз при старте, включая рестарты. Любая временная проблема: сеть, DNS, файл, env превращается в стоппер сервиса. В логах:
journalctl -u myservice{}
ExecStartPre failed with exit code 7{}
Типичные ошибки:
ExecStartPre=/bin/mkdir /var/run/app
ExecStartPre=/usr/bin/test -f /config/app.yml
ExecStartPre=/usr/bin/psql -c "select 1"{}
Для post-хуков помни, если ExecStartPost падает, значит сервис уже запущен, но unit помечается как failed.
Практическое правило
ExecStartPre - только для быстрых, гарантированных операций (создать каталог, выставить права, подготовить env). Все, что зависит от сети, БД, других сервисов лучше выносить в код сервиса.
Вывод
ExecStartPre - это точка отказа, если одна команда упала, то сервис не стартует. Если хук может упасть либо гаси ошибку, либо убирай его совсем.
LinuxCamp | #utils
ss -tan | grep TIME-WAIT | wc -l{}
Проблемой это становится только тогда, когда новые соединения перестают создаваться. Обычно происходит, когда закончились ephemeral ports. Это временные клиентские порты, которые ядро автоматически выделяет для исходящих соединений. Их диапазон можно посмотреть здесь:
cat /proc/sys/net/ipv4/ip_local_port_range{}
Если диапазон узкий и соединения короткие, порты быстро оказываются заняты TIME_WAIT.
Почему их становится много
Короткие HTTP-соединения, отсутствие keep-alive, прокси, балансировщики, высокая RPS, микросервисы, healthchecks - все это создает тысячи короткоживущих TCP-сессий. В этом сценарии большое количество TIME_WAIT признак нагрузки, а не поломки.
Что делать безопасно
Обычно ничего. Если упираешься в лимиты, расширяют диапазон ephemeral ports и разрешают повторное использование TIME_WAIT для клиентов:
sysctl -w net.ipv4.ip_local_port_range="10240 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1{}
Главное решение все равно на уровне приложения: keep-alive, connection pool, HTTP/2.
Вывод
TIME_WAIT - это нормальное состояние TCP. Пока есть свободные ephemeral ports, система работает корректно. Если они заканчиваются, то масштабируй диапазон портов и соединения, а не пытайся лечить TCP.
LinuxCamp | #utilsps aux | grep "команда запуска вашего контейнера", но если контейнеров запущенной одной и той же командой на хосте много, то лучше воспользоваться CLI вашего рантайма (типа crictl) для опредленя PID'а нужного контейнера.
2. Заходим в сетевой неймспейс этого процесса через команду nsenter -n -t $PID, где -n значит network.
Всё. Можете проверить, что вы там, где нужно, введя команду ip a.
Это очень полезный метод, когда вам либо самим нужно что-то проверить, либо когда нужно доказательство клиенту, что с трафиком из контейнера 100% всё порядке.
Между инцидентами
Реклама. Давыдов И.А. ИНН 775108336633. erid: 2W5zFGaTMax
dmesg | grep conntrack
типичный вывод:
nf_conntrack: table full, dropping packet{}
Проверяем текущее состояние
# сколько соединений сейчас
cat /proc/sys/net/netfilter/nf_conntrack_count
# максимальный лимит
cat /proc/sys/net/netfilter/nf_conntrack_max{}
Если count ≈ max, то ты уже в зоне риска.
Временное решение
Увеличить лимит на лету:
sysctl -w net.netfilter.nf_conntrack_max=262144{}
Постоянная настройка
В /etc/sysctl.conf или /etc/sysctl.d/conntrack.conf:
net.netfilter.nf_conntrack_max=262144
net.netfilter.nf_conntrack_tcp_timeout_established=600{}
И применить:
sysctl -p{}
Вывод
Переполненный conntrack выглядит как непонятная поломка сети. Проверка занимает 10 секунд, но лучше заранее заняться настройкой правильного лимита.
LinuxCamp | #utils
[Service]
Restart=always{}
Почему это выглядит удобно
Сервис упал, systemd быстро поднял. Никаких алертов, все типо работает. Именно здесь начинается проблема.
Типичный плохой сценарий
Сервис падает сразу после старта.
Restart=always
RestartSec=1{}
В итоге:
start → crash → restart → crash → restart{}
CPU жрётся, логи летят, система шумит, а причина падения маскируется. Посмотреть это легко:
systemctl status myservice
journalctl -u myservice{}
Когда Restart=always реально зло
Если сервис падает из-за: ошибки конфигурации, отсутствия зависимостей, недоступной сети, битых env-переменных. В этих случаях рестарт ничего не чинит, а только мешает диагностике.
Более безопасная альтернатива
Для большинства сервисов лучше:
Restart=on-failure
RestartSec=5{}
systemd перезапустит сервис при краше, но не будет вечно крутить его при нормальном выходе.
Контроль перезапусков
Чтобы не получить restart loop:
StartLimitIntervalSec=60
StartLimitBurst=5{}
После 5 падений за минуту systemd остановит сервис.
Когда Restart=always оправдан
Очень простые демоны, воркеры без состояния, sidecar-сервисы, сервисы, где падение = всегда ошибка. Даже там обычно добавляют лимиты.
Вывод
Restart=always - не защита, а автоповтор ошибки. Если сервис может падать из-за конфигурации или окружения используй on-failure и лимиты. Автоперезапуск должен помогать системе, а не скрывать проблемы.
LinuxCamp | #utilsОтзывы канала
всего 12 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
LinuxCamp | DevOps — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 14.4K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 89.1, количество отзывов – 12, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 14685.3 ₽, а за 56 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий