Чтобы прочитать больше статей из этой серии, пожалуйста, посетите мойБлог GitHub, пример кода, пожалуйста, посетитездесь.
Введение в PM2
PM2Это широко используемый инструмент управления процессами узла, который может обеспечивать управление приложениями node.js, например, автоматическую перезагрузку, мониторинг производительности, балансировку нагрузки и т. д. Аналогичные инструменты включают Supervisor, Forever и т. д.
установка ПМ2
Для использования PM2 требуется глобальная установка npm.
npm install -g pm2
Запустить проект PM2
Тестовый проект в этой статье напрямую выбирает проект, выполненный в предыдущей статье, и адрес/lesson29/
.
Начать проект напрямую
pm2 поддерживает запуск стартового проекта server.js напрямую следующим образом:
pm2 start server.js
Вы можете запустить приложение Node.js, и вы увидите напечатанную информацию после успеха:
[PM2] Spawning PM2 daemon with pm2_home=C:\Users\23101\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting C:\xxx\lesson29\server.js in fork_mode (1 instance)
[PM2] Done.
┌────────┬────┬──────┬────────┬───┬─────┬───────────┐
│ Name │ id │ mode │ status │ ↺ │ cpu │ memory │
├────────┼────┼──────┼────────┼───┼─────┼───────────┤
│ server │ 0 │ fork │ online │ 0 │ 0% │ 32.0 MB │
└────────┴────┴──────┴────────┴───┴─────┴───────────┘
Use `pm2 show <id|name>` to get more details about an app
В таблице показано, что имя приложения — сервер, а идентификатор — 0. И имя приложения, и идентификатор могут использоваться в качестве идентификатора приложения.
Управление приложениями через профили
PM2 также поддерживает управление приложениями с помощью файлов конфигурации, которые могут предоставлять более богатые конфигурации.Поддерживаемые форматы конфигурации: Javascript, JSON и YAML.Подробнее см.Документация.
структура папок
После запуска PM2 автоматически создаст следующие папки:
$HOME/.pm2 будет содержать все файлы, связанные с PM2. $HOME/.pm2/logs будет содержать все журналы приложений. $HOME/.pm2/pids будет содержать идентификаторы всех приложений. $HOME/.pm2/pm2.log Журнал PM2 $HOME/.pm2/pm2.pid PID PM2 Файл сокета $HOME/.pm2/rpc.sock для удаленных команд Файл сокета $HOME/.pm2/pub.sock для публикации событий $HOME/.pm2/conf.js Конфигурация PM2
В Windows переменная среды $HOME может быть $HOMEDRIVE + $HOMEPATH.
Посмотреть список приложений
использовать командуpm2 list
Список приложений можно посмотреть:
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤
│ server │ 0 │ 1.0.0 │ fork │ 24776 │ online │ 9 │ 19m │ 0% │ 35.4 MB │ 23101 │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
Посмотреть сведения о приложении
Введите в командной строкеpm2 show 0
, всплывающая информация выглядит следующим образом:
Describing process with id 0 - name server
┌───────────────────┬─────────────────────────────────────────────┐
│ status │ online │
│ name │ server │
│ version │ 1.0.0 │
│ restarts │ 0 │
│ uptime │ 3m │
│ script path │ C:\xxx\lesson29\server.js │
│ script args │ N/A │
│ error log path │ C:\Users\23101\.pm2\logs\server-error.log │
│ out log path │ C:\Users\23101\.pm2\logs\server-out.log │
│ pid path │ C:\Users\23101\.pm2\pids\server-0.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 0 │
│ exec cwd │ C:\xxx\lesson29 │
│ exec mode │ fork_mode │
│ node.js version │ 11.9.0 │
│ node env │ N/A │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2019-04-09T14:07:23.918Z │
└───────────────────┴─────────────────────────────────────────────┘
Revision control metadata
┌──────────────────┬──────────────────────────────────────────┐
│ revision control │ git │
│ remote url │ https://github.com/chencl1986/Blog.git │
│ repository root │ C:\xxx\Blog │
│ last update │ 2019-04-09T14:07:24.928Z │
│ revision │ 08f1efdfeb48bcc87f96b563d4d013a22e42ed9f │
│ comment │ │
│ branch │ master │
└──────────────────┴──────────────────────────────────────────┘
Actions available
┌────────────────────────┐
│ km:heapdump │
│ km:cpu:profiling:start │
│ km:cpu:profiling:stop │
│ km:heap:sampling:start │
│ km:heap:sampling:stop │
└────────────────────────┘
Trigger via: pm2 trigger server <action_name>
Code metrics value
┌────────────────────────┬───────┐
│ Heap Size │ 13.70 │
│ Heap Usage │ 59.91 │
│ Used Heap Size │ 8.21 │
│ Active requests │ 0 │
│ Active handles │ 4 │
│ Event Loop Latency │ 2.30 │
│ Event Loop Latency p95 │ 7.15 │
│ HTTP Mean Latency │ 10 │
│ HTTP P95 Latency │ 10038 │
│ HTTP │ 0 │
└────────────────────────┴───────┘
Add your own code metrics: http://bit.ly/code-metrics
Use `pm2 logs server [--lines 1000]` to display logs
Use `pm2 env 0` to display environement variables
Use `pm2 monit` to monitor CPU and Memory usage server
Мониторинг ЦП/памяти
использоватьpm2 monit
метод, вы можетеМониторинг процессора и памятиИспользование и сообщение об ошибке приложения также будут напечатаны в окне Global Logs следующим образом:
Отслеживание изменений кода
Используйте следующие команды для отслеживания сохранения кода и обновления приложения.
pm2 start server.js --watch
PM2 не только прослушивает файл server.js, но также прослушивает все модули, на которые он ссылается, при условии сохранения любого кода модуля, например нажатия на клавиатуру.ctrl + s
, или создайте новый файл, PM2 перезапустится.
Если вам нужно игнорировать определенные файлы, вы можетеконфигурационный файлв настройках так:
{
"watch": ["server", "client"],
"ignore_watch" : ["node_modules", "client/img"],
"watch_options": {
"followSymlinks": false
}
}
- watch может быть логическим значением, массивом путей или строкой, представляющей путь. По умолчанию ложно.
- ignore_watch может быть массивом путей или строкой, это будетchokidarИнтерпретируется как glob или регулярное выражение.
- watch_options — это объект, который заменяет опции chokidar. Определения см.чокидар документация.
Управление окружением
При разработке проекта обычно необходимоУправление окружением, PM2 может использовать файлы конфигурации и параметры командной строки для настройки среды.
Добавить файл конфигурации
Во-первых, используйтеpm2 init
команда для созданияecosystem.config.js
файл, который уже имеет конфигурацию по умолчанию.
module.exports = {
apps : [{
name: 'API',
script: 'app.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'one two',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
deploy : {
production : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : 'git@github.com:repo.git',
path : '/var/www/production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
};
Изменить настройку
Среди них, полезных для экологического менеджмента:
{
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}
Чтобы соответствовать нашему проекту, конфигурация может быть изменена следующим образом:
{
env: {
NODE_ENV: 'dev'
},
env_development: {
NODE_ENV: 'dev'
},
env_production: {
NODE_ENV: 'prod'
}
}
Соответствующие им команды запуска:
pm2 start ecosystem.config.js --watch --env
pm2 start ecosystem.config.js --watch --env development
pm2 start ecosystem.config.js --watch --env production
Запустите среду разработки
В серверном коде вы можете передатьprocess.env.NODE_ENV
, получить установленное значение.
Например, мы используемpm2 start ecosystem.config.js --watch --env development
команду для запуска проекта, вы можете распечататьprocess.env.NODE_ENV
Значение `dev:
Пример кода: /lesson29/config/index.js
const process = require('process')
console.log(process.env.NODE_ENV) // dev
mode = process.env.NODE_ENV // dev
управление журналом
PM2 обеспечивает очень мощныйуправление журналомфункция, которая поддерживает просмотр журналов несколькими способами.
-
Просмотр журналов в специальном формате даты
# 以特殊日期格式查看server应用的日志 pm2 logs server --format
Результат выглядит следующим образом:
timestamp=2019-04-10-23:13:25+0800 app=server id=0 type=out message=dev timestamp=2019-04-10-23:13:26+0800 app=server id=0 type=out message=Server started at 8080
-
Просмотр журналов в формате JSON
pm2 logs server --json
Результат выглядит следующим образом:
{"timestamp":"2019-04-10T15:14:52.376Z","type":"process_event","status":"exit","app_name":"server"} {"timestamp":"2019-04-10T15:14:52.479Z","type":"process_event","status":"exit","app_name":"server"} {"message":"dev","timestamp":"2019-04-10T15:14:53.246Z","type":"out","process_id":0,"app_name":"server"} {"timestamp":"2019-04-10T15:14:53.284Z","type":"process_event","status":"online","app_name":"server"} {"message":"Server started at 8080","timestamp":"2019-04-10T15:14:53.474Z","type":"out","process_id":0,"app_name":"server"}
-
Посмотреть почти 3 строки журнала
pm2 logs server --lines 3
Результат выглядит следующим образом:
[TAILING] Tailing last 3 lines for [server] process (change the value with --lines option) C:\xxx\.pm2\logs\server-error.log last 3 lines: 0|server | code: 'ETIMEDOUT', 0|server | syscall: 'connect', 0|server | fatal: true } C:\xxx\.pm2\logs\server-out.log last 3 lines: 0|server | Server started at 8080 0|server | dev 0|server | Server started at 8080
Справка по интерфейсу командной строки
Помимо команд, представленных выше, в PM2 есть много других полезных команд, которые здесь не перечислены, при необходимости вы можете просмотреть их.Документация