Процессы и ядро изнутри: от top до strace
Поднимаемся на уровень глубже обычных команд: что такое процесс с точки зрения ядра, откуда берётся Load Average, как работает OOM Killer, что скрывается за системным вызовом и почему у файла может быть несколько дескрипторов.
- Определить, какой процесс перегружает CPU/память, и корректно его остановить
- Прочитать Load Average и объяснить, что стоит за каждым из трёх чисел
- Проследить системные вызовы процесса через strace
- Найти, какой процесс держит открытым нужный файл или порт
- Настроить лимиты на количество открытых файлов для пользователя/сервиса
Phần đầu bài giảng
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 " # найти все процессы в непрерываемом сне
Bài giảng đầy đủ dành cho thuê bao
Còn 24 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- 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: лимиты не только для развлечения дескрипторов
- Проект «Пиксель»: пишем скрипт-наблюдатель за ресурсами
- Дальше — а хватает ли Пикселю вообще места на диске
Bài viết liên quan đến bài học này
- Linux là gì: kernel, bản phân phối và hệ thống tệp giải thích đơn giản
- Lệnh Linux: bảng tóm tắt cho người mới và quản trị viên
- Khóa SSH: cấu hình đăng nhập máy chủ không cần mật khẩu
- Quyền truy cập trong Linux: chmod, chown và sudo qua ví dụ
- systemd: là gì, hoạt động ra sao và cách quản lý dịch vụ trong Linux
Tất cả bài giảng của khóa học
- 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
- Финал: собираем защищённый и автоматизированный сервер целиком