티스토리 뷰
PM2는 Node를 기반으로 하는 프로세스 매니저입니다. Node.js의 특성상 단일 CPU 코어에서 실행되기 때문에 CPU 멀티코어 시스템은 사용할 수 없지만, Non-Blocking I/O 모델을 지원하는 Node의 특성상 가볍고 성능이 뛰어납니다. 한 개의 코어만 사용하는 Node를 해결하기 위해 클러스터 모듈을 통해 단일 프로세스의 Worker를 늘려 멀티 프로세스처럼 사용할 수 있도록 합니다.
그렇다보니 Node 서비스를 운영하는데에는 혹시 모르는 불안함이 있기 때문에 그러한 경우 에러 핸들링과 코드 재배포, 서버 리부팅 등과 같이 고민하고자 하는 부분을 해결하기 위해서 PM2 를 도입합니다.
PM2의 설치 방법은 다른 노드 모듈을 설치하는 것과 같습니다.
$ npm i -g pm2
사용방법
app.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('OK')
})
app.listen(port)
그리고 커맨드 라인에서 다음과 같이 실행해줍니다.
$ pm2 start app.js
이를 package.json에 넣어서 실행 명령어로도 사용할 수 있습니다.
package.json
{
"name": "node-express",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon app.js",
+ "pm2" : "pm2 start app.js"
},
...
}
$ npm start pm2
클러스터링 모드 적용
이제 설치 및 실행이 되는 것을 체크하였고, 실제로 운영중인 서버의 프로세스 상태를 확인하기 위한 세팅을 진행하고자 합니다. 가장 먼저 Process Configuration File을 생성합니다.
$ vi processes.config.js
module.exports = {
apps: [{
name: 'app',
script: './app.js',
instances: 0,
exec_mode: 'cluster'
}]
}
그리고 package.json 내의 script 부분에 수정또한 필요합니다.
{
"name": "node-express",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon app.js",
- "pm2" : "pm2 start app.js"
+ "pm2" : "pm2 start processes.config.js"
},
...
}
클러스터링 프로세스 개수 증감
위와 같이 클러스터모드로 실행되면 하나의 cpu만 사용하는 문제를 해결할 수 있습니다. 만약 프로세스 개수를 늘리거나 줄여야한다면 pm2 scale 명령어를 사용할 수 있습니다. 또, 프로세스를 재시작하고 상태를 체크할 수도 있습니다.
# 프로세스 4개 늘리기
$ pm2 scale app +4
# 프로세스 3개 줄이기
$ pm2 scale app 4
# 프로세스 재시작
$ pm2 reload app
# 프로세스 상태 표시
$ pm2 list
'Server' 카테고리의 다른 글
[Java] 대용량 파일 AWS에 업로드하기 (0) | 2021.06.21 |
---|---|
Nginx 설치와 기본 환경 설정 (0) | 2021.06.18 |
API Throttling 에 대해서 (0) | 2021.06.17 |
Socket.io 사용하여 채팅 구현하기 (0) | 2021.06.15 |
CSV 파일의 한글 깨짐 수정하기 (0) | 2021.06.15 |
Redis와 Express Session 함께 사용하기 (0) | 2021.06.15 |