For the complete documentation index, see llms.txt. This page is also available as Markdown.

Настройка Fork и Cluster в PM2

PM2 используется для запуска Frontend iEXExchanger, контроля его состояния и автоматического перезапуска при сбое.

Frontend работает через Node.js и принимает локальные подключения на порту 4000. Nginx передаёт запросы клиентского сайта на запущенный Frontend-процесс.

PM2 позволяет использовать один процесс Frontend или несколько процессов одновременно. Количество процессов необходимо выбирать с учётом мощности сервера и фактической нагрузки.

Для большинства проектов рекомендуется начинать с одного процесса, а затем увеличивать instances, если это действительно требуется.

Создание конфигурации PM2

В корневой директории Frontend создайте файл:

ecosystem.config.cjs

Добавьте:

module.exports = {
    apps: [
        {
            name: 'iexexchanger',
            script: 'dist/exchanger/server/server.mjs',
            cwd: __dirname,

            instances: 1,
            exec_mode: 'fork',

            autorestart: true,
            watch: false,
            max_memory_restart: '1G',

            env: {
                NODE_ENV: 'production',
                PORT: 4000,
                HOST: '127.0.0.1',
                PM2: 'true',
            },

            log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
            error_file: 'logs/err.log',
            out_file: 'logs/out.log',
            merge_logs: true,
            time: true,

            listen_timeout: 10000,
            kill_timeout: 5000,
            exp_backoff_restart_delay: 100,
        },
    ],
};

Эта конфигурация запускает один Frontend-процесс в режиме fork.

После создания сохраните файл.

Что означают instances и exec_mode

На производительность Frontend в PM2 в первую очередь влияют два параметра:

instances определяет количество одновременно работающих экземпляров Frontend.

exec_mode определяет способ их запуска.

PM2 поддерживает режимы fork и cluster. В режиме cluster PM2 может запускать несколько экземпляров Node.js-приложения и распределять между ними входящие соединения.

Режим Fork

Базовая конфигурация:

В этом режиме работает один экземпляр Frontend.

Этот вариант рекомендуется использовать как начальный для большинства проектов.

Он подходит, когда:

  • обменный пункт только запускается;

  • нагрузка на Frontend небольшая или средняя;

  • на одном сервере также работают Backend, PostgreSQL, Redis и фоновые процессы;

  • нет необходимости использовать несколько процессов Frontend.

Преимущество такой конфигурации — предсказуемое потребление ресурсов и простая диагностика.

Если одного процесса достаточно для текущей нагрузки, увеличивать instances не требуется.

Режим Cluster

Для запуска нескольких Frontend-процессов используется cluster.

Например:

PM2 запустит два экземпляра Frontend и будет распределять входящие соединения между ними. Cluster Mode предназначен именно для использования нескольких процессов Node.js и распределения нагрузки между ними.

Например, можно использовать:

если сервер имеет достаточный запас ресурсов и такая конфигурация действительно требуется по нагрузке.

Можно ли использовать один процесс в Cluster Mode

Да. Допустима конфигурация:

Frontend будет работать с одним экземпляром, но через Cluster Mode.

При одном процессе преимуществ распределения нагрузки между несколькими экземплярами нет. Такой вариант можно использовать, если вы планируете в дальнейшем увеличивать instances и хотите сразу оставить Frontend в режиме cluster.

Например, сначала:

а при росте нагрузки изменить только количество:

После этого конфигурацию не потребуется переводить с fork на cluster.

Какой режим выбрать

Для большинства проектов используйте один из двух вариантов.

Вариант
Конфигурация
Когда использовать

Стандартный

1 instance, fork

Рекомендуемый начальный вариант

Масштабируемый

1+ instances, cluster

Когда требуется несколько Frontend-процессов

Если вы не знаете, какой вариант нужен, начинайте с:

Если вы понимаете работу PM2, контролируете ресурсы сервера и планируете масштабировать Frontend, можно сразу использовать:

а затем постепенно увеличивать instances.

Сколько instances использовать

Не существует одного правильного количества процессов для всех серверов.

Количество зависит от:

  • количества vCPU;

  • объёма RAM;

  • нагрузки на Frontend;

  • количества одновременных посетителей;

  • нагрузки на остальные службы сервера.

Если Frontend, Backend, PostgreSQL, Redis и фоновые процессы работают на одном сервере, нельзя отдавать все ресурсы только PM2.

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

Сервер
PM2
Рекомендация

2–4 vCPU, 8 GB RAM

1 instance

Оставить fork

4 vCPU, 16 GB RAM

1 instance

Начать с fork, при необходимости проверить 2 в cluster

8+ vCPU, 32+ GB RAM

1–2 instances

Увеличивать постепенно после проверки нагрузки

Эти значения не являются жёсткими ограничениями.

Например, сервер с 4 vCPU не означает, что нужно обязательно устанавливать:

Часть ресурсов требуется Backend, PostgreSQL, Redis, очередям и другим процессам.

Лучший подход — начать с одного процесса, посмотреть фактическую нагрузку и увеличивать количество экземпляров только при необходимости.

Почему не рекомендуется сразу использовать max

PM2 позволяет автоматически использовать максимальное количество доступных процессорных ядер.

Например:

Также PM2 поддерживает значение 0, при котором количество процессов определяется по доступным CPU.

Для стандартной установки iEXExchanger использовать max без контроля ресурсов не рекомендуется.

Если сервер имеет 8 vCPU, PM2 может запустить несколько экземпляров Frontend, хотя на этом же сервере должны работать PostgreSQL, Redis, PHP и другие компоненты.

В результате увеличение количества Frontend-процессов может не ускорить проект, а создать дополнительную нагрузку.

Предпочтительнее самостоятельно указать количество:

и затем проверить результат.

Как увеличить количество процессов

Если Frontend уже работает в Cluster Mode, количество процессов можно изменить в конфигурации.

Например, было:

измените на:

После изменения перезагрузите приложение:

Для сетевых приложений Cluster Mode поддерживает перезагрузку процессов без обычного полного остановочного цикла restart: PM2 запускает новые workers и заменяет старые.

Количество процессов также можно изменять через PM2:

Например:

устанавливает четыре экземпляра процесса. Команда pm2 scale поддерживается PM2 для изменения количества workers.

Если вы изменили рабочую конфигурацию, не забудьте сохранить текущее состояние:

Как проверить нагрузку

Перед увеличением instances проверьте текущее состояние Frontend.

Список процессов

Выполните:

Команда показывает запущенные процессы, их состояние, использование памяти и другую основную информацию.

Если используется Cluster Mode с несколькими экземплярами, в списке будут отображаться отдельные процессы iexexchanger.

Мониторинг в реальном времени

Для наблюдения за CPU и памятью выполните:

PM2 откроет мониторинг процессов непосредственно в терминале.

Не оценивайте необходимость масштабирования сразу после запуска.

Проверяйте сервер во время обычной и повышенной нагрузки.

Как понять, нужно ли увеличивать instances

Увеличивать количество процессов имеет смысл, если Frontend действительно становится ограничением.

Перед изменением проверьте:

  • нагрузку CPU Frontend;

  • использование памяти процессами;

  • общую загрузку сервера;

  • остаётся ли запас ресурсов для PostgreSQL, Redis и Backend;

  • изменяется ли скорость работы Frontend при высокой нагрузке.

Если один Frontend-процесс работает стабильно и не создаёт ограничений, оставьте:

Большее количество процессов само по себе не означает более быстрый сайт.

Ограничение памяти

В конфигурации используется:

PM2 контролирует потребление памяти процесса и может перезапустить его после превышения установленного значения. Форматы K, M и G поддерживаются PM2.

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

Например:

означает запуск четырёх отдельных процессов Frontend.

Поэтому при увеличении instances всегда контролируйте общее использование RAM.

Автоматический перезапуск

Параметр:

разрешает PM2 автоматически перезапускать Frontend после аварийного завершения процесса.

Параметр:

используется для увеличивающейся задержки между повторными попытками запуска при последовательных сбоях.

Это помогает избежать слишком частых перезапусков, если приложение не может нормально запуститься.

Почему отключён watch

Используется:

Для production-сервера автоматический перезапуск Frontend при изменении файлов не требуется.

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

PM2 поддерживает автоматический режим watch, но он предназначен для перезапуска приложения при изменении файлов.

Логи Frontend

В конфигурации используются:

Ошибки Frontend записываются в:

Обычный вывод:

Посмотреть текущие логи через PM2 можно командой:

Для вывода последних строк:

PM2 предоставляет просмотр логов непосредственно через pm2 logs.

Если Frontend не запускается или постоянно перезапускается, проверка логов должна быть одним из первых действий.

Запуск Frontend

После создания ecosystem.config.cjs перейдите в директорию Frontend и выполните:

Проверьте результат:

Процесс должен отображаться с названием:

и находиться в рабочем состоянии.

Перезапуск и перезагрузка

Для обычного перезапуска:

В режиме cluster предпочтительно использовать:

restart останавливает и заново запускает процесс, а reload в Cluster Mode предназначен для последовательной замены workers с минимизацией простоя.

После изменения ecosystem.config.cjs можно выполнить:

Автоматический запуск после перезагрузки сервера

Просто запустить Frontend через PM2 недостаточно. Необходимо также настроить восстановление процессов после перезагрузки Linux.

Сначала выполните:

PM2 определит используемую систему запуска и выведет дополнительную команду.

Скопируйте и выполните команду, которую покажет PM2.

После этого сохраните текущий список процессов:

PM2 использует сохранённый список для восстановления приложений после перезагрузки сервера.

Проверка после перезагрузки

После настройки автозапуска рекомендуется проверить его реальной перезагрузкой сервера.

После запуска сервера выполните:

Убедитесь, что iexexchanger появился в списке автоматически.

Затем откройте клиентский сайт:

Frontend должен работать без ручного запуска PM2.

Если после перезагрузки Frontend не запустился

Сначала выполните:

Если список пустой, проверьте, выполнялись ли:

и:

При необходимости ранее сохранённый список процессов можно восстановить вручную:

PM2 использует resurrect для восстановления списка, ранее сохранённого через pm2 save.

Если процесс существует, но находится в состоянии ошибки, откройте его логи:

Рекомендуемая базовая конфигурация

Если у вас обычный production-сервер и нет отдельной причины использовать несколько экземпляров Frontend, используйте:

Если вы заранее хотите использовать Cluster Mode:

также является допустимым вариантом.

При росте нагрузки можно перейти на:

и проверить изменение нагрузки и производительности.

Дальнейшее увеличение:

или больше должно выполняться только после контроля CPU, RAM и общей нагрузки сервера.

Не используйте instances: 'max' только для того, чтобы задействовать все доступные vCPU. На сервере iEXExchanger ресурсы требуются не только Frontend, но и остальным компонентам проекта.

Проверка настройки

Настройка PM2 выполнена правильно, если:

  • pm2 list показывает процесс iexexchanger;

  • процесс находится в рабочем состоянии;

  • Frontend отвечает на локальном порту 4000;

  • клиентский сайт открывается через Nginx;

  • в logs/err.log нет постоянных ошибок запуска;

  • после перезагрузки сервера процесс восстанавливается автоматически;

  • выбранное количество instances не создаёт нехватку CPU или оперативной памяти.

Начинайте с минимально необходимого количества процессов и увеличивайте его только после проверки реальной нагрузки. Это позволяет использовать ресурсы сервера предсказуемо и не отбирать их у Backend, PostgreSQL, Redis и других компонентов iEXExchanger.

Последнее обновление

Это было полезно?