Управление процессами
Описание
Все задачи в системе запускаются как процессы
Каждый процесс имеет свой PID
Базовый менеджмент процессами включает приоритизацию и сигналирование задач
Некоторые процессы работают в многопоточном режиме, индивидуальный поток не управляется отдельно
Задачи, управляемые из shell, могут обрабатываться как задания (job)
Задачи могут запускаться и управляться в фоновом режиме
Управление заданиями
command & - запустит задание в фоновом процессе
Для переноса задачи в фоновый режим необходимо:
Остановить ее через Ctrl+Z
Ввести bg для перевода в фон
Команда jobs отобразит все текущие задания
fg [n] - выведет задание по ее номеру из фонового режима
Работа с ps
Команда ps имеет два различных диалекта: BSD и System5
Основная разница в использовании тире для ввода опций
"ps -L" и "ps L" будут являться различными командами
ps показывает все текущие процессы
ps aux показывает все процессы
ps -fax отобразит иерархическую структуру процессов
ps -fU <username> - показывает процессы пользователя
ps -f --forest -C <process> - дерево для конкретного процесса
ps L - отобразить форматы вывода
ps -eo pid,ppid,user,cmd - вывод с заданными форматами
ps aux по-умолчанию отображает столбцы:
USER - пользователь
PID - ID процесса
%CPU - загрузка ЦП данным процессом
%MEM - загрузка памяти данным процессом
VSZ - размер виртуальной памяти в килобайтах
RSS - оставшаяся память в килобайтах
TTY - терминальная линия (? - фоновый процесс)
STAT - статус процесса
START - время, когда запущен процесс
TIME - сколько процесс активен
COMMAND - название процесса
первым всегда идет systemd и имеет PID 1
процессы в "[...]" - процессы ядра
процессы сортируются от самого старого к самому последнему запущенному
Использование памяти
Linux хранит максимум файлов в кэше для быстрого доступа к ним
По этой причине свободной памяти в системе всегда мало
Для буфера избыточности памяти используется swap, расширяющий пространство RAM за счет ресурсов диска
Ядро переносит неактивные процессы в swap
free -m показывает текущее использование памяти
Использование CPU
runqueue - очередь задач для обработки
Каждая задача имеет свой PID
Порядок обработки задач из очереди определяется планировщиком (scheduler)
Если система мультипроцессорная или многоядерная, планировщик распределяет задачи между ними
Если система одноядерная, то задачи обрабатываются в определенном порядке одна за одной
Load Average показывает нагрузку в течение 1 минуты, 5 минут, 15 минут
watch uptime показывает загрузку в реальном времени
lscpu показывает информацию о ЦП в системе
Мониторинг через top
top - панель мониторинга системной активности
ключ f позволяет выбрать поля для отображения
выбор по пробелу
ключ М отфильтровывает по использованию памяти
ключ W сохраняет настройки отображения
Sleeping tasks - задачи, которые находились в неактивном состоянии за цикл опроса
Stopped tasks - вручную остановленные задачи через Ctrl+Z
Zombie tasks - неуправляемая задача, которая потеряла связь с родительскими процессами
Строка Cpu(s) показывает общую загрузку ЦП, при нажатии "1" отобразит по ядрам
us - user space
sy - system space
ni - процессы с изменненым приоритетом
id - idle
wa - waiting for I\O
hi - harware interrupts
si - software interrupts
ключ К позволяет отправить сигнал процессу
по-умолчанию выбирается первый процесс и сигнал 15
Сигналы для процессов
Сигналы позволяют системе прервать процесс для выполнения какой-то определенной задачи
Прерывания (interrupts) сопоставими с сигналами, но генерируются они с аппаратной части
Сигналы декларированы в справке man 7 signal
Не все сигналы работают в определенных случаях
kill отправляет сигнал на PID
или k через top
возможные альтернативы - pkill (работа с паттернами) или killall (работает с именами)
для снятия процесса используется тип сигнала sigterm (15) или sigkill (9)
sigterm рекомендуется для использования, поскольку позволяет сохранить процессу результаты своей работы, если таковые имеются
Приоритезация
По-умолчанию процессы в LInux запускаются с одним приоритетом
Процессы ядра реального времени имеют высший приоритет
Для изменения приоритетов процессов вне real-time используются команды nice и renice
Значения nice изменяются от -20 до 19
Отрицательные значения обозначают повышенный приоритет, положительные - пониженный
Пользователи могут понижать приоритет своих процессов, для повышения приоритета нужны root права
Приоритет удобно менять в top через ключ "r"
Также можно менять через непосредственно команду nice/renice:
nice -n -1 dd if=/dev/zero of=/dev/null
renice -n <increase priority value> <PID>
Профили
tuned - сервис для оптимизации производительности
Различные профили используются для различных рабочих потоков
Для использования необходимо, чтобы сервис tuned был запущен и находился в активном состоянии
tuned-adm list покажет список профилей
tuned-adm profile <name> - установит профиль
tuned-adm active - покажет активный профиль
Last updated
Was this helpful?