[Node.js] PM2를 활용한 서버 클러스터링

지난번 포스팅에서는 백그라운드에서 서버를 켜는 방법에 대해 포스팅했었습니다.
2021.07.02 - [Back-End/Node.js] - [Node.js] 서버 백그라운드로 실행하기 (npm forever)

 

[Node.js] 서버 백그라운드로 실행하기 (npm forever)

안녕하세요! 차니에요. 오늘은 Node 서버 구동 시에 터미널을 종료하면 서버가 같이 종료되는 부분을 백그라운드로 실행할 수 있는 방법을 알아보겠습니다! 1. forever 설치 sudo npm install forever -g node

dvlpr-chan.tistory.com

그런데 Node.js는 싱글 스레드를 사용한다는 점을 알았고
PM2를 활용하면 하이퍼 스레딩을 통한 클러스터링이 가능하다는 점을 알았습니다.
본 포스팅에서는 해당 내용을 다뤄보려고 합니다.

 

1. PM2 란?

Process Manager: 이름 그대로 프로세스를 관리해주는 모듈입니다.

 

2. PM2 설치

npm install -g pm2

npm으로 간편하게 설치해주도록 합시다.

 

3. PM2 사용법

3-1. 서버 실행

pm2 start <fileName>

위 명령어로 서버를 실행할 수 있습니다.
수동으로 프로세스를 죽이거나 에러가 발생하지 않는 한 서버는 죽지않습니다.

아무런 옵션없이 서버를 실행 시키면 기본 모드인 fork로 서버가 실행됩니다.
이렇게 되면 이전과 똑같이 싱글 스레드로 서버가 구동되기 때문에 클러스터 모드로 실행해야합니다.

pm2 start <fileName> -i max

-i max 옵션을 주게되면 PC가 가진 모든 코어를 사용하게 됩니다.

저는 8개의 CPU 코어를 가지고 있기 때문에 총 8개의 코어를 사용하며, mode를 보면 cluster로 표기되는 것을 볼 수 있습니다.

모든 코어를 다 사용하기 부담스럽다 혹은 필요 이상의 코어를 사용하고 있다.
라는 생각이 드는 경우 max가 아닌 코어 수를 지정해주면 됩니다. (ex. -i 4)

pm2 start app.js -i max --watch

추가적으로 서버 실행 시 --watch 옵션을 넣어준다면 프로젝트 변경사항을 감지하여 서버를 자동으로 리로드를 해줍니다.

 

3-2. 실행중인 pm2 목록 확인

pm2 list

위 명령어를 실행하면 pm2로 시작한 서버들 리스트를 조회할 수 있습니다.

 

3-3. pm2 종료

pm2 kill

실행중인 서버를 종료하고 싶은 경우 위 명령어를 실행하면 모두 종료됩니다.

pm2 del <pid> or <AppName>

특정 프로세스만 종료하고싶은 경우엔 해당 pid만 종료해주면 됩니다.

 

3-4. pm2 모니터링

pm2 monit

코어별 메모리/CPU 사용량, 로그 등을 확인할 수 있습니다.

3-5. 실시간 로그 확인

pm2 logs <AppName>

3-4의 모니터로 볼 경우 텍스트가 길면 잘리는 현상이 있어서 이렇게 확인 가능합니다.