PM2. Процесс менеджмент в Linux. - DEVNOTE
DEVNOTE

PM2. Процесс менеджмент в Linux.

PM2

Установка

Так как PM2 написан на Node.js и устанавливается с помощью npm, нужно установить их на свой виртуальный сервер:

sudo apt install nodejs

sudo apt install npm

Теперь устанавливаем сам диспетчер процессов:

npm install pm2 -g

Готово! PM2 на сервере.

Настройка

PM2 в основном предназначен для приложений Node.js, но работает и с остальными языками программирования. Чтобы запустить приложение, используем команды в консоли.

Для Node.js:

pm start app_name.js

Запуск с определенной меткой:

 pm start app_name.js --name "app name"

Для остальных языков программирования (на примере Python 3):

pm2 start app_name.py --interpreter=python3

Если ваше приложение завершит работу с ошибкой, PM2 автоматически перезапустит его, что очень удобно.

После запуска скриптов и приложений можно посмотреть информацию о них с помощью команды в консоли:

pm2 list

Пример того, что мы увидим:

image-20220925223235152

В таблице показано количество рестартов, потребляемая память и нагрузка на процессор от приложений.

Для удаления, запуска, рестарта и остановки приложений из списка нужно посмотреть порядковый номер (id) процесса в таблице, которую можно вызвать командой, указанной выше, и написать команды в консоли.

Остановка:

pm2 stop id

Запуск:

pm2 start id

Рестарт:

pm2 restart id

Удаление из списка:

pm2 delete id

Также можно просмотреть логи отдельных приложений. Для этого используем эту команду:

pm2 monit

И выбираем свое приложение из списка.

image-20220925223332869

Если вам неудобно следить за логами и запуском приложений через консоль, то это можно делать даже в браузере, установив веб-версию PM2 одной командой:

pm2 plus

После этого вводим свои данные для регистрации и переходим по ссылке, которая отобразится в консоли.

Пример того, что мы увидим:

image-20220925223354290

PS

Что такое процесс?

Чтобы понять что отображает команда ps сначала надо разобраться что такое процесс. Процесс Linux - это экземпляр программы, запущенный в памяти. Все процессы можно разделить на обычные и фоновые. Более подробно об этом написано в статье управление процессами Linux. Linux - это многопользовательская система, каждый пользователь может запускать одни и те же программы, и даже один пользователь может захотеть запустить несколько экземпляров одной программы, поэтому ядру нужно как-то идентифицировать такие однотипные процессы. Для этого каждому процессу присваивается PID (Proccess Identificator).

Каждый из процессов может находиться в одном из таких состояний:

  • Запуск - процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
  • Ожидание - процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа - те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
  • Остановлено - обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
  • Зомби - это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.

Команда ps в Linux

Сначала рассмотрим общий синтаксис команды, здесь все очень просто:

$ ps опции

$ ps опции | grep параметр

Во втором варианте мы используем утилиту grep для того, чтобы отобрать нужные нам процессы по определенному критерию. Теперь рассмотрим опции утилиты. Они делятся на два типа - те, которые идут с дефисом Unix и те, которые используются без дефиса - BSD. Лучше пользоваться только опциями Unix, но мы рассмотрим и одни и другие. Заметьте, что при использовании опций BSD, вывод утилиты будет организован в BSD стиле.

Дополнительные опции

  • -A, -e, (a) - выбрать все процессы;
  • -a - выбрать все процессы, кроме фоновых;
  • -d, (g) - выбрать все процессы, даже фоновые, кроме процессов сессий;
  • -N - выбрать все процессы кроме указанных;
  • - выбирать процессы по имени команды;
  • -G - выбрать процессы по ID группы;
  • -p, (p) - выбрать процессы PID;
  • –ppid - выбрать процессы по PID родительского процесса;
  • -s - выбрать процессы по ID сессии;
  • -t, (t) - выбрать процессы по tty;
  • -u, (U) - выбрать процессы пользователя.

Опции форматирования

  • - отображать информацию планировщика;
  • -f - вывести максимум доступных данных, например, количество потоков;
  • -F - аналогично -f, только выводит ещё больше данных;
  • -l - длинный формат вывода;
  • -j, (j) - вывести процессы в стиле Jobs, минимум информации;
  • -M, (Z) - добавить информацию о безопасности;
  • -o, (o) - позволяет определить свой формат вывода;
  • –sort, (k) - выполнять сортировку по указанной колонке;
  • -L, (H)- отображать потоки процессов в колонках LWP и NLWP;
  • -m, (m) - вывести потоки после процесса;
  • -V, (V) - вывести информацию о версии;
  • -H - отображать дерево процессов;

Практика

Теперь, когда вы знаете синтаксис и опции, можно перейти ближе к практике. Чтобы просто посмотреть процессы в текущей оболочке используется такая команда терминала ps:

 ps

image-20220925225053092

Все процессы, кроме лидеров групп, в том же режиме отображения:

ps -A

image-20220925225115905

Все процессы, включая фоновые и лидеры групп:

ps -d

image-20220925225158357

Чтобы вывести больше информации о процессах используйте опцию -f:

ps -f

image-20220925225222659

При использовании опции -f команда выдает такие колонки:

  • UID - пользователь, от имени которого запущен процесс;
  • PID - идентификатор процесса;
  • PPID - идентификатор родительского процесса;
  • C - процент времени CPU, используемого процессом;
  • STIME - время запуска процесса;
  • TTY - терминал, из которого запущен процесс;
  • TIME - общее время процессора, затраченное на выполнение процессора;
  • CMD - команда запуска процессора;
  • LWP - показывает потоки процессора;
  • PRI - приоритет процесса.

Например, также можно вывести подробную информацию обо всех процессах:

ps -Af

image-20220925225305820

Больше информации можно получить, использовав опцию -F:

 ps -Fe

image-20220925225332612

Эта опция добавляет такие колонки:

  • SZ - это размер процесса в памяти;
  • RSS - реальный размер процесса в памяти;
  • PSR - ядро процессора, на котором выполняется процесс.

Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:

 ps -l

image-20220925225407050

Эта опция добавляет отображение таких колонок:

  • F - флаги, ассоциированные с этим процессом;
  • S - состояние процесса;
  • PRI - приоритет процесса в планировщике ядра Linux;
  • NI - рекомендованный приоритет процесса, можно менять;
  • ADDR - адрес процесса в памяти;
  • WCHAN - название функции ядра, из-за которой процесс находится в режиме ожидания.

Дальше мы можем отобрать все процессы, запущенные от имени определенного пользователя:

 ps -fu root

image-20220925225436953

С помощью опции -H можно отобразить дерево процессов:

 ps -fHu root

image-20220925225502143

Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать PID процесса:

 ps -fp 1

image-20220925225529252

Через запятую можно указать несколько PID:

 ps -fp 1,2,3

image-20220925225547198

Опция позволяет фильтровать процессы по имени, например, выберем только процессы chrome:

 ps -fC chrome

image-20220925225611648

Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:

 ps -fL

image-20220925225629502

Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса и команду:

ps -o pid,comm

image-20220925225655727

Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user, vsize, priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов, которые используют больше всего памяти:

 ps -Fe --sort rss

image-20220925225713788

Или по проценту загрузки cpu:

 ps -FA --sort pcpu

image-20220925225732076

Ещё одна опция - -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:

 ps -eM

image-20220925225754615

Общее количество запущенных процессов Linux можно узнать командой:

 ps -e | wc

image-20220925225818861