PM2 представляет собой зрелый инструмент для управления долгоживущими Node.js-процессами, их автоматического перезапуска, логирования и мониторинга. В контексте автоматизации и тестирования с Puppeteer PM2 выступает надёжным механизмом запуска браузерных задач в фоне и их устойчивого выполнения под нагрузкой.
ecosystem.config.js) с
несколькими процессами.
Особое значение имеют устойчивость и логирование. Проблемы вроде зависшего Chromium, утечек памяти или длительных соединений часто проявляются в тестовых лабораториях с Puppeteer. PM2 обеспечивает рестарт процесса и сбор диагностических данных, уменьшая риск простоя.
Установка производится глобально через npm и занимает минимум времени:
npm install -g pm2
Запуск локального скрипта с Puppeteer:
pm2 start run-tests.js --name="puppeteer-tests"
Проверка состояния:
pm2 status
Просмотр логов:
pm2 logs puppeteer-tests
Перезапуск:
pm2 restart puppeteer-tests
Удаление процесса:
pm2 delete puppeteer-tests
Эти операции образуют минимальный набор действий при отладке и сопровождении автоматизационных задач.
Ecosystem-файл позволяет описывать несколько процессов в декларативной форме. Это особенно удобно при наличии набора взаимосвязанных тестовых сервисов и вспомогательных воркеров.
Пример ecosystem.config.js для Puppeteer-сценариев:
module.exports = {
apps: [
{
name: &
script: './runner.js',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
},
max_memory_restart: '600M',
out_file: './logs/runner.out.log',
error_file: './logs/runner.err.log'
}
]
};
Ключевые элементы:
instances и exec_mode управляют режимом
исполнения. Для Puppeteer чаще выбирается fork, поскольку
Chromium плохо масштабируется в режиме кластера.
max_memory_restart полезен для контроля утечек памяти при
долгой работе браузера.
out_file и error_file обеспечивают раздельное
логирование стандартного вывода и ошибок.
env и env_production позволяют
настраивать тестовые и продакшн-окружения.
Запуск по ecosystem-файлу:
pm2 start ecosystem.config.js --env production
Puppeteer активно пишет диагностические сообщения, а Chromium формирует значительные объёмы системного вывода. Логирование под PM2 делает их доступными для анализа:
pm2 logs
Для ротации существует встроенный модуль:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
Ротация решает проблемы переполнения диска при длительных нагрузочных тестах.
Использование restart_delay и max_restarts
помогает контролировать частоту перезапусков. При наличии нестабильных
сетевых тестов это важно для общей устойчивости стенда.
Пример:
{
name: 'puppeteer-worker',
script: './worker.js',
restart_delay: 2000,
max_restarts: 10
}
Такая конфигурация предотвращает бесконечные циклы рестартов и вместе с тем даёт процессу возможность восстановиться после временного сбоя.
При распространённых сценариях массового параллельного рендеринга или
скрейпинга Puppeteer требователен к ресурсам. PM2 позволяет распределять
задачи по процессам, а не по потокам, избегая конфликтов Chromium и
снижая риск взаимного влияния. Регулировка количества инстансов
производится через instances, но на практике для браузера
предпочтителен один процесс на одно ядро или даже меньше, в зависимости
от потребления памяти.
PM2 может работать как системный сервис, автоматически поднимаясь после перезагрузки машины:
pm2 startup
pm2 save
Такой режим подходит для длительных e2e-лабораторий, CI-стендов и аналитических воркеров на Puppeteer.
Команда pm2 monit визуализирует использование CPU и памяти,
что позволяет отслеживать аномалии в реальном времени. Для Puppeteer
подобные метрики важны, поскольку Chromium склонен к росту потребления
памяти при длительных тестах.
Также PM2 предоставляет HTTP API и интеграцию с внешними системами мониторинга. Это облегчает построение наблюдаемости в распределённых стендах.
PM2 органично вписывается в конвейеры CI/CD. Запуск тестов может происходить одновременно с сервисами, которые Puppeteer использует в процессе тестирования (например, dev-сервер фронтенда). Ecosystem-файл делает конфигурацию воспроизводимой и переносимой между машинами.
Отдельная польза заключается в том, что PM2 позволяет хранить конфигурацию тестовых раннеров в репозитории, упрощая инфраструктурные задачи и уменьшая риск «дрейфа окружений».
Работа Puppeteer с реальным браузером требует учёта безопасного
завершения процессов Chromium. PM2 обеспечивает корректные сигналы
завершения (SIGINT, SIGTERM) и даёт
возможность использовать graceful shutdown в коде, закрывая
браузеры и соединения перед остановкой.
Дополнительно можно применять пространства имён и докеризацию. PM2 остаётся ответственным за управление процессом внутри контейнера, тогда как контейнер обеспечивает сетевую и файловую изоляцию.
max_memory_restart, чтобы предотвращать накопление утечек
памяти.
restart_delay для смягчения последствий
нестабильных сетей или тестов.
PM2 формирует надежный фундамент для сопровождения процессов Puppeteer, делая тестовые стенды устойчивыми, управляемыми и воспроизводимыми как в разработке, так и в CI-практиках.