[CentOS] PM2 설치 및 사용 방법

리눅스 환경에서 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
2
3
4
5
6
7
8
9
10
11
12
// app.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', function (req, res) {
res.send('Hello World!');
});

app.listen(port, function () {
console.log(`application is listening on port ${port}...`);
});

pm2를 통해 실행합니다.

1
[root@localhost test]$ pm2 start app.js

또는 이름을 지정하여 실행할 수 있습니다.

1
[root@localhost test]$ pm2 start app.js --name app

아무런 옵션없이 PM2를 사용하여 실행하면 위의 그림처럼 포크(fork) 모드로 애플리케이션을 실행합니다.

클러스터 모드 사용

설정파일을 활용해 클러스터 모드로 실행할 수 있습니다.

1
2
3
# 설정파일 생성
[root@localhost test]$ touch ecosystem.config.js
[root@localhost test]$ vi ecosystem.config.js
1
2
3
4
5
6
7
8
9
10
11
// ecosystem.config.js
module.exports = {
apps: [
{
name: 'app',
script: './app.js',
instances: 0,
exec_mode: 'cluster',
},
],
};
1
[root@localhost test]$ pm2 start ecosystem.config.js

위의 코드를 복사하고 pm2 명령어로 실행하면 클러스터 모드로 실행됩니다. exec_mode 값을 'cluster’로 설정하면 클러스터 모드로 실행한다는 의미이고, instances 값을 '0’으로 설정하면 CPU 코어 수 만큼 프로세스를 실행한다는 의미입니다. instances 값을 0이 아닌 고정으로 설정할 수도 있습니다.

다수의 어플리케이션 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module.exports = {
apps: [
{
name: 'collect',
cwd: './workspace/pipeline-service-collector',
script: 'npm',
args: 'run serve',
instances: 5,
exec_mode: 'cluster',
},
{
name: 'collect-manager',
cwd: './workspace/pipeline-service-collector-manager',
script: 'npm',
args: 'run serve',
},
],
};

위의 코드는 두 개의 애플리케이션을 실행하는 예제입니다. 첫 번째는 클러스터 모드로 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
2
3
4
[hgko@localhost test]$ sudo su
[root@localhost test]$ cd /usr/local/lib
[root@localhost lib]$ chown -R hgko:hgko nodejs
[root@localhost lib]$ exit
Share