Управление процессами
Описание
Все задачи в системе запускаются как процессы
Каждый процесс имеет свой PID
Базовый менеджмент процессами включает приоритизацию и сигналирование задач
Некоторые процессы работают в многопоточном режиме, индивидуальный поток не управляется отдельно
Задачи, управляемые из shell, могут обрабатываться как задания (job)
Задачи могут запускаться и управляться в фоновом режиме
Управление заданиями
command & - запустит задание в фоновом процессе
Для переноса задачи в фоновый режим необходимо:
Остановить ее через Ctrl+Z
Ввести bg для перевода в фон
[root@centos8 ~]# dd if=/dev/zero of=/dev/null
^Z
[1]+ Stopped dd if=/dev/zero of=/dev/null
[root@centos8 ~]# bg
[1]+ dd if=/dev/zero of=/dev/null &
Команда 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 показывает текущее использование памяти
[admin@centos8 ~]$ free -m
total used free shared buff/cache available
Mem: 1803 1120 169 12 513 505
Swap: 2047 363 1684
Использование CPU
runqueue - очередь задач для обработки
Каждая задача имеет свой PID
Порядок обработки задач из очереди определяется планировщиком (scheduler)
Если система мультипроцессорная или многоядерная, планировщик распределяет задачи между ними
Если система одноядерная, то задачи обрабатываются в определенном порядке одна за одной

[admin@centos8 ~]$ uptime
11:26:28 up 1 day, 8:30, 1 user, load average: 0.00, 1.12, 1.95
Load Average показывает нагрузку в течение 1 минуты, 5 минут, 15 минут
watch uptime показывает загрузку в реальном времени
lscpu показывает информацию о ЦП в системе
Мониторинг через top
top - панель мониторинга системной активности
ключ f позволяет выбрать поля для отображения
выбор по пробелу
ключ М отфильтровывает по использованию памяти
ключ W сохраняет настройки отображения
top - 11:38:12 up 1 day, 8:42, 1 user, load average: 0.34, 0.21, 0.94
Tasks: 333 total, 1 running, 332 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.7 us, 3.2 sy, 0.0 ni, 88.4 id, 0.0 wa, 1.7 hi, 0.2 si, 0.0 st
MiB Mem : 1803.2 total, 202.9 free, 1019.4 used, 580.9 buff/cache
MiB Swap: 2048.0 total, 1688.8 free, 359.2 used. 606.0 avail Mem
PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
107515 13.4 3308780 247344 16 239196 102632 95 0 13.2 gnome-shell
1728 5.3 3164924 98648 16 262552 30512 36k 0 1.0 gnome-shell
107942 5.1 1602848 93556 1044 112380 37368 37 0 0.0 gnome-softwa+
107939 3.1 1277984 56388 92 57080 45380 3 0 0.0 evolution-al+
107598 3.0 862252 56292 84 41540 45524 1 0 0.0 ibus-x11
107977 2.5 1564128 46592 12 87388 38304 0 0 0.0 evolution-ad+
107620 2.5 1054348 46180 32 54084 38084 8 0 0.0 gnome-shell-+
107717 2.5 1292536 45496 8 53700 37232 2 0 0.0 evolution-ca+
107624 2.5 1149488 45292 112 37268 36988 5 0 0.0 evolution-so+
107902 2.4 1286132 45020 8 53664 36816 2 0 0.0 evolution-ad+
107858 2.4 1639812 44980 12 95592 36728 0 0 0.0 evolution-ca+
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 покажет список профилей
[admin@centos8 ~]$ tuned-adm list
Available profiles:
- balanced - General non-specialized tuned profile
- desktop - Optimize for the desktop use-case
- hpc-compute - Optimize for HPC compute workloads
- latency-performance - Optimize for deterministic performance at the cost of increased power consumption
- network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest - Optimize for running inside a virtual guest
- virtual-host - Optimize for running KVM guests
Current active profile: virtual-guest
tuned-adm profile <name> - установит профиль
tuned-adm active - покажет активный профиль
Last updated
Was this helpful?