Docs of Jace-Lab

PM2

PM2(Process Manager 2)

1. 프로세스 실행 및 이름 관리

가장 기본이 되는 프로세스 제어 명령어입니다.

  • 애플리케이션 시작 (이름 지정):

    pm2 start app.js --name "my-service"
  • 실행 중인 프로세스 이름 변경: restart 명령어를 통해 이름을 덮어쓸 수 있습니다.

    pm2 restart <ID_또는_기존이> --name "new-service-name"
  • 클러스터 모드 실행: CPU 코어 수만큼 인스턴스를 실행하여 성능을 극대화합니다.

    pm2 start app.js -i max

2. 상태 모니터링

현재 운영 중인 서비스의 리소스 상태를 확인합니다.

  • 리스트 확인: 현재 실행 중인 모든 프로세스의 상태(CPU, Memory, Uptime 등)를 봅니다.
    pm2 list
    # 또는
    pm2 status
  • 실시간 대시보드: 터미널 내에서 화려한 UI로 리소스 점유율을 모니터링합니다.
    pm2 monit
  • 상세 정보 확인: 특정 프로세스의 경로, 인자값, 환경 변수 등을 상세히 조회합니다.
    pm2 show <ID_또는_이>

3. 로그 관리

디버깅과 장애 파악을 위해 가장 중요한 부분입니다.

  • 실시간 로그 확인:

    pm2 logs <ID_또는_이>
    
  • 로그 파일 위치 확인: 로그가 저장되는 물리적 경로를 확인합니다.
    pm2 show <ID_또는_이> | grep "log path"
  • 로그 초기화: 누적된 로그 내용을 비웁니다.
    pm2 flush

4. 설정 파일 활용 (Ecosystem File)

명령어에 옵션을 길게 붙이는 대신 ecosystem.config.js를 사용하면 복잡한 설정을 코드처럼 관리할 수 있습니다.

module.exports = {
  apps: [
    {
      name: "my-api",
      script: "./dist/main.js", // 빌드된 경로 등
      instances: "max", // 클러스터 모드
      exec_mode: "cluster",
      env: {
        // 기본 환경 변수
        NODE_ENV: "development",
      },
      env_production: {
        // --env production 옵션 사용 시
        NODE_ENV: "production",
      },
      watch: false, // 파일 변경 시 자동 재시작 여부
      max_memory_restart: "1G", // 메모리 과부하 시 자동 재시작
    },
  ],
}
  • 설정 파일로 실행: pm2 start ecosystem.config.js

5. 서버 재부팅 시 자동 실행 (Startup)

서버 자체가 재시작되었을 때 PM2 프로세스들이 자동으로 다시 뜨도록 설정합니다.

  1. 덤프 생성: 현재 실행 중인 프로세스 리스트를 저장합니다.
    pm2 save
  2. 스크립트 생성: 운영체제에 맞는 startup 스크립트를 생성합니다.
    pm2 startup
    명령어를 치면 나오는 긴 한 줄의 코드를 복사해서 터미널에 다시 붙여넣어야 완료됩니다.

6. 기타 유용한 팁

  • 프로세스 중지/삭제:
    pm2 stop <ID>
    pm2 delete <ID>
  • 전체 일괄 처리: all 키워드를 사용합니다. (예: pm2 restart all)
  • 코드 변경 시 자동 재시작: 개발 환경에서 유용합니다.
    pm2 start app.js --watch

On this page