관리 메뉴

피터의 개발이야기

[Node.js] PM2를 사용한 Node.js 애플리케이션 관리하기 본문

DevOps/Node.js

[Node.js] PM2를 사용한 Node.js 애플리케이션 관리하기

기록하는 백앤드개발자 2024. 9. 16. 10:10
반응형

ㅁ 들어가며

ㅇ PM2는 Node.js 애플리케이션을 위한 강력한 프로세스 관리자이다.

ㅇ 이 글에서는 PM2의 주요 기능과 사용법을 정리하였다.

 

ㅁ PM2란?

PM2는 Node.js 애플리케이션을 위한 강력한 프로세스 관리자이다.

 

주요 특징
 - 애플리케이션을 데몬으로 실행하고 모니터링
 - 서버가 갑자기 중지되어도 자동으로 재시작
 - 멀티코어 활용을 위한 클러스터 모드를 지원
 - 로드 밸런싱 기능을 제공

 

ㅁ PM2 설치

npm install pm2 -g

 

ㅁ 기본 사용법

애플리케이션 실행

ㅇ PM2로 Node.js 애플리케이션을 실행하는 간단한 방법

pm2 start app.js

프로세스 관리

프로세스 목록

pm2 list

 

프로세스를 중지, 재시작, 삭제

pm2 stop app.js
pm2 restart app.js
pm2 delete app.js

 

ㅁ 클러스터 모드

ㅇ PM2의 클러스터 모드를 사용하면 Node.js의 싱글 스레드 한계를 극복할 수 있다.

pm2 start app.js -i max

ㅇ 이 명령어는 가용한 CPU 코어 수만큼 프로세스를 생성한다.

 

ㅁ 무중단 서비스 구현

ㅇ PM2를 사용하면 애플리케이션을 무중단으로 업데이트할 수 있다.

ㅇ 이를 위해 ecosystem.config.js 파일을 생성한다.

module.exports = {
  apps: [{
    name: "app",
    script: "./app.js",
    instances: "max",
    exec_mode: "cluster",
    watch: true,
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}

ㅇ 이 설정 파일로 애플리케이션을 실행하고 무중단 재시작을 할 수 있다:

pm2 start ecosystem.config.js
pm2 reload ecosystem.config.js

 

ㅁ Gracefully Reload

ㅇ PM2의 startOrGracefulReload 명령어는 애플리케이션을 우아하게(gracefully) 재시작하는 기능을 제공한다.

ㅇ 기존 연결을 강제로 끊지 않고 모든 연결이 정상적으로 종료될 때까지 기다린다.

ㅇ kill_timeout 옵션을 통해 이전 프로세스의 종료 대기 시간을 설정할 수 있다.

ecosystem.config.js과 같은 설정 파일을 사용하여 여러 애플리케이션을 동시에 관리할 수 있다.

$ pm2 startOrGracefulReload ecosystem.config.js --wait-ready --update-env

 

ㅁ 로그 관리

ㅇ PM2는 자동으로 로그를 관리한다.

pm2 logs

 

ㅇ 로그 파일이 계속 쌓이는 것을 방지하기 위해 pm2-logrotate 모듈을 사용할 수 있다.

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 1K
pm2 set pm2-logrotate:retain 10

 

ㅁ 모니터링

pm2 monit

ㅇ 이 명령어를 통해 CPU 사용량, 메모리 사용량, 요청 처리량 등을 실시간으로 확인할 수 있다.

 

ㅁ CheatSheet

# Fork mode
pm2 start app.js --name my-api # Name process

# Cluster mode
pm2 start app.js -i 0        # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max      # Same as above, but deprecated.
pm2 scale app +3             # Scales `app` up by 3 workers
pm2 scale app 2              # Scales `app` up or down to 2 workers total

# Listing

pm2 list               # Display all processes status
pm2 jlist              # Print process list in raw JSON
pm2 prettylist         # Print process list in beautified JSON

pm2 describe 0         # Display all information about a specific process

pm2 monit              # Monitor all processes

# Logs

pm2 logs [--raw]       # Display all processes logs in streaming
pm2 flush              # Empty all log files
pm2 reloadLogs         # Reload all logs

# Actions

pm2 stop all           # Stop all processes
pm2 restart all        # Restart all processes

pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)

pm2 stop 0             # Stop specific process id
pm2 restart 0          # Restart specific process id

pm2 delete 0           # Will remove process from pm2 list
pm2 delete all         # Will remove all processes from pm2 list

# Misc

pm2 reset <process>    # Reset meta data (restarted time...)
pm2 updatePM2          # Update in memory pm2
pm2 ping               # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart

ㅇ 출처: PM2 Process Management Quick Start - CheatSheet

 

ㅁ 마무리

PM2를 활용하면 Node.js 애플리케이션의 안정성과 성능을 크게 향상시킬 수 있으며, 효율적인 프로세스 관리와 무중단 배포가 가능하다. 특히 클러스터 모드와 무중단 서비스 기능은 대규모 애플리케이션 운영에 매우 유용하다.

 

ㅁ 함께 보면 좋은 사이트

PM2 사용자 메뉴얼

PM2 Process Management Quick Start

반응형

'DevOps > Node.js' 카테고리의 다른 글

[Node.js] Docker를 이용한 샘플 node.js 작성  (0) 2024.09.15
Comments