Framework/Nodejs

pm2에 대해 알아보자

옥수수수염차 2017. 10. 6. 17:22

pm2란?

  • pm2는 생산 프로세스 관리자로 서버 인스턴스들에 대한 로드 밸런싱과 더불어 Node.js의 스케일 업이나 스케일 다운을 돕는다.

  • 프로세스들이 계속 실행할 수 있는 환경을 제공한다.

  • 처리하지 못한 예외에 의해 쓰레드가 죽음으로 인해 어플리케이션이 죽는 현상을 방지한다.

  • 로드 밸러서 역할도 할 수 있다.

Node.js의 단일 쓰레드 어플리케이션과 예외

Node.js는 어플리케이션은 단일 쓰레드로 실행된다. 이것은 Node.js가 동시성을 지원하지 않는다는 의미가 아니다.(어플리케이션이 병렬로 실행된다는 것을 의미)

이는 다음을 암시한다.

예외가 처리되지 않으면 어플리케이션은 죽는다.

따라서 예외를 처리하기 위해 bluebird와 같은 promise library를 사용하여 성공과 실패에 대한 핸들러를 추가한다. 예외를 발생시키지 않음으로 어플리케이션이 죽는 경우를 방지한다.

하지만 처리할 수 없는 오류가 존재하기 때문에 pm2와 같은 태스크 러너를 사용하여 해결한다.

pm2 명령어

  1. app.js를 pm2에서 관리(app.js는 포크 모드에서 실행 - pm2가 로드 밸러서로 동작하지 않고 앱을 포크만 했다는 것을 의미)

pm2 start app.js

pm2 show [id] 을 통해 실행되고 있는 id에 해당하는 정보를 출력할 수 있다.

  1. pm2가 실행하는 앱의 개수를 모니터

pm2 monit
  1. logs를 확인

pm2 logs
  1. 어플리케이션 재시작 어플리케이션을 다운타임 없이 재시작을 보장한다.

pm2는 들어오는 요청을 큐에 대기시키고, 앱이 다시 반응하게 되면 앱의 재시작을 보장

pm2 reload all

pm2의 클러스터 기능

pm2는 클러스터 모드로 수행할 수 있는 기능을 제공한다. 클러스터 모드에서는 pm2는 지정된 대로 컨틀로러 프로세스와 많은 작업 프로세스를 생성한다. > Node.js 의 단일 쓰레드 기술로 멀티코어 CPU의 혜택을 누릴 수 있다.

  1. 실행중인 어플리케이션을 중지한다.

      pm2 stop all
  1. 클러스터 모드로 앱을 실행하기 위해 앱에 대한 정보를 지운다.

    pm2 delete all
  1. 다음 명령어는 세 개의 작업 프로세스 사이에서 라운드 로빈 방식으로 동작함을 의미한다. 동시에 3개의 요청에 대응할 수 있다.

    pm2 start app.js -i 3


다음 명령어를 통해 작업 프로세스의 수를 줄이거나 늘릴 수 있다.

    pm2 scale app 2