விரிவுரை முன்னோட்டம்

Процессы и ядро изнутри: от top до strace

Поднимаемся на уровень глубже обычных команд: что такое процесс с точки зрения ядра, откуда берётся Load Average, как работает OOM Killer, что скрывается за системным вызовом и почему у файла может быть несколько дескрипторов.

ps/top/htop Load Average и использование памяти сигналы и kill системные вызовы и strace inode и файловые дескрипторы ulimit
இந்த விரிவுரையில் நீங்கள் என்ன கற்றுக்கொள்வீர்கள்
  • Определить, какой процесс перегружает 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 ஆசிரியர் மற்றும் நேர்காணல் திறக்கும்.

உள்நுழை அல்லது பதிவு செய் சந்தா பெறு

விரிவுரை உள்ளடக்கம்

  1. Load Average огромный, процессор свободен — и вы понятия не имеете почему
  2. ps, top и htop: три способа посмотреть на процессы живьём
  3. Буква рядом с процессом — это не мусор, а его реальное состояние
  4. Зомби-процесс: он уже мёртв, но всё ещё занимает место в таблице
  5. SIGTERM и SIGKILL — это не два флага одной команды, а совсем разные просьбы
  6. Грабли: kill -9 первым делом — и потерянные данные вдобавок к зависанию
  7. nice и renice: указываем ядру, кому уступать процессор в первую очередь
  8. free -m: четыре числа, и «мало свободной памяти» — почти всегда не проблема
  9. Page Cache: занятая память, которую ядро отдаст обратно за миллисекунды
  10. SWAP: диск вместо памяти — работает, но обманчиво медленно
  11. OOM Killer: когда памяти совсем не осталось, кто-то должен умереть
  12. Load Average: три числа — это очередь, а не только загрузка процессора
  13. Куда смотреть, если LA высокий, а CPU почти свободен
  14. ❓ Стоп-проверка: LA=12, процессор простаивает, а kill -9 не помогает
  15. 💡 Разбор: процесс в состоянии D не видит сигналов вообще, даже SIGKILL
  16. Системный вызов: единственная дверь из программы в ядро
  17. Что реально происходит, когда вы набираете команду ls
  18. strace: видеокамера, направленная на разговор программы с ядром
  19. strace с фильтром: не весь шум, а только то, что вас интересует
  20. inode: настоящий адрес файла на диске, а не его имя
  21. Диск не полный, а файл не создаётся: закончились не байты, а inode
  22. Файловый дескриптор: номер, через который процесс общается с миром
  23. lsof: кто именно держит открытым этот файл или этот порт
  24. Реальная задача: перенести сервис, о котором известен только порт
  25. ulimit и limits.conf: лимиты не только для развлечения дескрипторов
  26. Проект «Пиксель»: пишем скрипт-наблюдатель за ресурсами
  27. Дальше — а хватает ли Пикселю вообще места на диске

இந்தப் பாடம் தொடர்பான கட்டுரைகள்

இந்தப் படிப்பின் அனைத்து விரிவுரைகள்

  1. Linux: с нуля до уверенного администрирования
  2. Как устроена файловая система Linux: от корня до загрузки ядра
  3. Пользователи, права доступа и sudo: кто и что может делать в системе
  4. Bash-скрипты: от команды в терминале до рабочего скрипта автоматизации
  5. Пакеты, окружение и первая автоматизация: apt, профиль и cron
  6. Обработка текста и данных в терминале: grep, sed, awk, jq и curl
  7. Процессы и ядро изнутри: от top до strace
  8. Диски, разделы и хранилище: от lsblk до LVM и RAID
  9. systemd: как на самом деле запускаются сервисы в современном Linux
  10. Журналы и мониторинг: journald, rsyslog и sysstat
  11. Сеть в Linux: от IP-адреса до сокета и DNS
  12. Удалённый доступ и сетевые хранилища: SSH, rsync, NFS и SMB
  13. Firewall и защита сервера: ufw, nftables, fail2ban и GPG
  14. Финал: собираем защищённый и автоматизированный сервер целиком