리눅스 환경에서 PM2 설치 및 사용 방법에 대해서 알아보겠습니다.
Node.js는 단일 CPU 코어에서 실행되기 때문에 CPU 개수만큼 멀티코어 시스템을 사용하기 위해 PM2(Process Manager 2)를 설치하고 사용하였습니다.
설치
먼저 npm 이 설치되어 있어야 합니다. 아래 블로그를 참고하여 설치합니다.
설치가 완료되면 다음 명령어를 사용하여 pm2를 설치합니다.
[hgko@localhost ~]$ sudo npm install pm2 -g
설치 확인
pm2 프로세스의 상태를 확인합니다. 처음에는 시작한 애플리케이션이 없기 때문에 아무것도 없습니다.
[hgko@localhost ~]$ pm2 list
기본 사용 방법
pm2 를 사용해 보기 위해 간단한 애플리케이션을 작성하겠습니다. app.js 파일을 생성하고 아래 코드를 복사합니다.
// 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를 통해 실행합니다.
[root@localhost test]$ pm2 start app.js
또는 이름을 지정하여 실행할 수 있습니다.
[root@localhost test]$ pm2 start app.js --name app
아무런 옵션없이 PM2를 사용하여 실행하면 위의 그림처럼 포크(fork) 모드로 애플리케이션을 실행합니다.
클러스터 모드 사용
설정파일을 활용해 클러스터 모드로 실행할 수 있습니다.
# 설정파일 생성
[hgko@localhost test]$ touch ecosystem.config.js
[hgko@localhost test]$ vi ecosystem.config.js
// ecosystem.config.js
module.exports = {
apps: [
{
name: 'app',
script: './app.js',
instances: 0,
exec_mode: 'cluster',
},
],
};
[hgko@localhost test]$ pm2 start ecosystem.config.js
위의 코드를 복사하고 pm2 명령어로 실행하면 클러스터 모드로 실행됩니다. exec_mode
값을 'cluster'로 설정하면 클러스터 모드로 실행한다는 의미이고, instances
값을 '0'으로 설정하면 CPU 코어 수 만큼 프로세스를 실행한다는 의미입니다. instances
값을 0이 아닌 고정으로 설정할 수도 있습니다.
다수의 어플리케이션 설정
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개로 줄일 수 있습니다.
[hgko@localhost test]$ pm2 scale app 2
재시작
[hgko@localhost test]$ pm2 reload
중지
[hgko@localhost test]$ pm2 stop app
삭제
[hgko@localhost test]$ pm2 delete app
추가 설정
nodejs 권한이 잘못 되어있는 경우
[hgko@localhost test]$ sudo su
[root@localhost test]$ cd /usr/local/lib
[root@localhost lib]$ chown -R hgko:hgko nodejs
[root@localhost lib]$ exit
'DevOps > Linux' 카테고리의 다른 글
[CentOS] 유용하게 쓰는 명령어들 (0) | 2022.09.19 |
---|---|
[CentOS] Nginx 설치 및 사용 방법 (0) | 2022.09.19 |
[CentOS] 아파치 톰캣(Tomcat) 설치 및 사용 방법 (0) | 2022.09.18 |
[CentOS] NFS 설치 및 설정 방법 (0) | 2022.09.17 |
[CentOS] Apache Kafka 설치 및 사용 방법 (0) | 2022.09.17 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!