본문 바로가기

Infra/Server

PM2 restart vs reload

728x90
반응형

pm2 restart

  • 모든 프로세스를 중단 후 다시 시작
  • 프로세스가 죽고 새로 뜨기 때문에 다운타임(downtime) 발생
  • 클러스터 모드(instances > 1)에서도 프로세스 전체가 동시에 종료 → 요청이 잠시 끊김
  • 개발 환경에서 코드 변경을 빠르게 반영할 때 많이 사용
  • 운영 환경에서는 트래픽이 잠깐이라도 끊기기 때문에 가급적 지양
pm2 restart ecosystem.config.js

pm2 reload

  • 무중단(Zero-downtime) 재시작 방식
  • 클러스터 모드에서 워크 프로세스를 하나씩 교체한다.
    • ex) 4개 instance → 1번부터 순서대로 교체 → 서비스 중단 없이 업데이트
    • 이 방식으로 서비스 중단 없이 배포 가능
  • 싱글 인스턴스(instances = 1)일 경우, 교체할 프로세스가 하나뿐이라 결국 restart와 동일
  • 운영 서버 배포에서 무중단 배포를 원할 때 권장
pm2 reload ecosystem.config.js

무중단 배포를 위한 조건

  • reload무조건 무중단인 것은 아님
  • ecosystem.config.js에서 instances를 2개 이상으로 설정해야 효과 있음
  • 만약 인스턴스가 하나라면 reload = restart
module.exports = {
  apps: [
    {
      name: "my-app",
      script: "server.js",
      instances: 2,      // 최소 2 이상
      exec_mode: "cluster",
    },
  ],
};

ecosystem.config.js와 직접 명령의 차이

  • pm2 restart <name> or pm2 reload <name>로 앱 이름을 지정할 수도 있고,
    pm2 restart ecosystem.config.js설정 전체를 반영할 수도 있음
  • 보통 운영에서는 ecosystem.config.js를 Git에 버전 관리하고, 배포 스크립트 안에서 pm2 reload로 돌림
    → 설정 변경과 무중단 배포를 동시에 진행

실제 운영환경의 베스트 프랙티스

  • 개발 환경: pm2 restart → 빠르게 반영, 다운타임 문제 X
  • 운영 환경:
    • instances: 2+ + exec_mode: cluster
    • pm2 reload로 무중단 배포
    • 배포 자동화(Jenkins, GitHub Actions 등)와 함께 쓰면 효율적

정리

  • instances = 1 일 경우 restartreload는 똑같음
  • instances > 1 일 경우 reload를 써야 무중단 배포 가능
  • 운영환경에서는 꼭 reload + 클러스터 모드로 최소 2개의 인스턴스를 준비하고, 무중단 배포를 구성해야 안정적이다.
728x90
반응형

'Infra > Server' 카테고리의 다른 글

k6 부하 테스트 가이드  (0) 2025.09.18
ppk to pem  (0) 2025.06.16
hombrew 설치 및 zsh: command not found 해결  (0) 2021.11.08
빌드의 자동화를 위한 Jenkins(젠킨스)  (0) 2021.10.13