Процессы и ядро изнутри: от top до strace
Поднимаемся на уровень глубже обычных команд: что такое процесс с точки зрения ядра, откуда берётся Load Average, как работает OOM Killer, что скрывается за системным вызовом и почему у файла может быть несколько дескрипторов.
- Определить, какой процесс перегружает CPU/память, и корректно его остановить
- Прочитать Load Average и объяснить, что стоит за каждым из трёх чисел
- Проследить системные вызовы процесса через strace
- Найти, какой процесс держит открытым нужный файл или порт
- Настроить лимиты на количество открытых файлов для пользователя/сервиса
Начало лекции
Load Average огромный, процессор свободен — и вы понятия не имеете почему
- Высокий Load Average не всегда значит «процессор перегружен»
- top показывает цифры, но не объясняет их причину
- Сегодня — разбираемся, что на самом деле стоит за этими цифрами
Пользователи жалуются: сайт отвечает по десять секунд. Открываете top — Load Average зашкаливает, а процессор при этом почти простаивает. Цифры есть, объяснения нет. Знакомых команд для просмотра процессов вам хватало, пока всё работало быстро — сегодня выясняем, что на самом деле происходит внутри системы, когда что-то идёт не так.
ps, top и htop: три способа посмотреть на процессы живьём
- ps aux — снимок всех процессов на момент запуска команды
- top — тот же снимок, но обновляется на лету
- htop — то же самое, но удобнее для человека (цвета, мышь, дерево)
ps показывает список процессов один раз, ровно на момент запуска команды — статичный снимок. top показывает почти то же самое, но обновляет экран каждые несколько секунд, превращая снимок в живое наблюдение. htop — это тот же top, только с человеческим лицом: цвета, прокрутка, дерево родитель-потомок и управление мышью, без необходимости запоминать горячие клавиши.
# Снимок всех процессов прямо сейчас
ps aux
# Живое обновление раз в пару секунд
top
# То же самое, но с деревом процессов и цветом
htop
Буква рядом с процессом — это не мусор, а его реальное состояние
- R (Running) — выполняется или ждёт своей очереди на CPU
- S (Sleeping) — ждёт события, можно прервать в любой момент
- D (Uninterruptible sleep) — ждёт диск, нельзя прервать вообще
Рядом с каждым процессом в top стоит буква состояния, и она говорит больше, чем кажется. R значит, что процесс либо реально работает, либо стоит в очереди на процессор. S — процесс спит, ожидая события, и его можно прервать в любой момент. А вот D — это сон, который прервать нельзя никак: процесс ждёт ответа от диска и в этот момент даже не реагирует на сигналы.
# Статус конкретного процесса
cat /proc/1234/status | grep State
# State: D (disk sleep)
ps aux | grep " D " # найти все процессы в непрерываемом сне
Полная лекция — по подписке
Ещё 24 слайдов в полной версии.
Видео, все слайды, конспект, тесты, AI-тьютор и собеседование открываются после входа и оформления подписки.
Войти или зарегистрироваться Оформить подпискуСодержание лекции
- Load Average огромный, процессор свободен — и вы понятия не имеете почему
- ps, top и htop: три способа посмотреть на процессы живьём
- Буква рядом с процессом — это не мусор, а его реальное состояние
- Зомби-процесс: он уже мёртв, но всё ещё занимает место в таблице
- SIGTERM и SIGKILL — это не два флага одной команды, а совсем разные просьбы
- Грабли: kill -9 первым делом — и потерянные данные вдобавок к зависанию
- nice и renice: указываем ядру, кому уступать процессор в первую очередь
- free -m: четыре числа, и «мало свободной памяти» — почти всегда не проблема
- Page Cache: занятая память, которую ядро отдаст обратно за миллисекунды
- SWAP: диск вместо памяти — работает, но обманчиво медленно
- OOM Killer: когда памяти совсем не осталось, кто-то должен умереть
- Load Average: три числа — это очередь, а не только загрузка процессора
- Куда смотреть, если LA высокий, а CPU почти свободен
- ❓ Стоп-проверка: LA=12, процессор простаивает, а kill -9 не помогает
- 💡 Разбор: процесс в состоянии D не видит сигналов вообще, даже SIGKILL
- Системный вызов: единственная дверь из программы в ядро
- Что реально происходит, когда вы набираете команду ls
- strace: видеокамера, направленная на разговор программы с ядром
- strace с фильтром: не весь шум, а только то, что вас интересует
- inode: настоящий адрес файла на диске, а не его имя
- Диск не полный, а файл не создаётся: закончились не байты, а inode
- Файловый дескриптор: номер, через который процесс общается с миром
- lsof: кто именно держит открытым этот файл или этот порт
- Реальная задача: перенести сервис, о котором известен только порт
- ulimit и limits.conf: лимиты не только для развлечения дескрипторов
- Проект «Пиксель»: пишем скрипт-наблюдатель за ресурсами
- Дальше — а хватает ли Пикселю вообще места на диске
Статьи по теме лекции
- Что такое Linux: ядро, дистрибутивы и файловая система простыми словами
- Linux команды: шпаргалка для начинающих и администраторов
- SSH-ключи: настройка входа на сервер без пароля
- Права доступа в Linux: chmod, chown и sudo на примерах
- systemd: что это, как работает и как управлять сервисами в Linux
Все лекции курса
- Linux: с нуля до уверенного администрирования
- Как устроена файловая система Linux: от корня до загрузки ядра
- Пользователи, права доступа и sudo: кто и что может делать в системе
- Bash-скрипты: от команды в терминале до рабочего скрипта автоматизации
- Пакеты, окружение и первая автоматизация: apt, профиль и cron
- Обработка текста и данных в терминале: grep, sed, awk, jq и curl
- Процессы и ядро изнутри: от top до strace
- Диски, разделы и хранилище: от lsblk до LVM и RAID
- systemd: как на самом деле запускаются сервисы в современном Linux
- Журналы и мониторинг: journald, rsyslog и sysstat
- Сеть в Linux: от IP-адреса до сокета и DNS
- Удалённый доступ и сетевые хранилища: SSH, rsync, NFS и SMB
- Firewall и защита сервера: ufw, nftables, fail2ban и GPG
- Финал: собираем защищённый и автоматизированный сервер целиком