Управление процессами

Описание

  • Все задачи в системе запускаются как процессы

  • Каждый процесс имеет свой 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