리눅스 환경에서 PM2 설치 및 사용 방법에 대해서 알아보겠습니다.
Node.js 는 단일 CPU 코어에서 실행되기 때문에 CPU 개수만큼 멀티코어 시스템을 사용하기 위해 PM2(Process Manager 2) 를 설치하고 사용하였습니다.
설치
npm이 설치되어 있어야 합니다.
1 | [root@localhost ~]$ npm install pm2 -g |
설치 확인
pm2 프로세스의 상태를 확인합니다. 처음에는 시작한 애플리케이션이 없기 때문에 아무것도 없습니다.
1 | [root@localhost ~]$ pm2 list |
기본 사용 방법
pm2를 사용해 보기 위해 간단한 애플리케이션을 작성하겠습니다. app.js 파일을 생성하고 아래 코드를 복사합니다.
1 | // app.js |
pm2를 통해 실행합니다.
1 | [root@localhost test]$ pm2 start app.js |
또는 이름을 지정하여 실행할 수 있습니다.
1 | [root@localhost test]$ pm2 start app.js --name app |

아무런 옵션없이 PM2를 사용하여 실행하면 위의 그림처럼 포크(fork) 모드로 애플리케이션을 실행합니다.
클러스터 모드 사용
설정파일을 활용해 클러스터 모드로 실행할 수 있습니다.
1 | 설정파일 생성 |
1 | // ecosystem.config.js |
1 | [root@localhost test]$ pm2 start ecosystem.config.js |
위의 코드를 복사하고 pm2 명령어로 실행하면 클러스터 모드로 실행됩니다. exec_mode 값을 'cluster’로 설정하면 클러스터 모드로 실행한다는 의미이고, instances 값을 '0’으로 설정하면 CPU 코어 수 만큼 프로세스를 실행한다는 의미입니다. instances 값을 0이 아닌 고정으로 설정할 수도 있습니다.
다수의 어플리케이션 설정
1 | module.exports = { |
위의 코드는 두 개의 애플리케이션을 실행하는 예제입니다. 첫 번째는 클러스터 모드로 5개의 프로세스를 실행하도록 설정하였고, 두 번째는 포크(fork) 모드로 하나의 프로세스를 실행하도록 하였습니다. 이렇게 여러 개의 애플리케이션을 한 번에 실행하도록 설정을 할 수도 있습니다. 실제로 동작하는 상태는 아래 그림과 같습니다.

프로세스 줄이기
프로세스의 수가 많다면 프로세스를 2개로 줄일 수 있습니다.
1 | [root@localhost test]$ pm2 scale app 2 |
재시작
1 | [root@localhost test]$ pm2 reload |
중지
1 | [root@localhost test]$ pm2 stop app |
삭제
1 | [root@localhost test]$ pm2 delete app |
추가 설정
nodejs 권한이 잘못 되어있는 경우
1 | [hgko@localhost test]$ sudo su |