nodemon 과 pm2 차이
1372
작성한 질문수 2
nodemon으로 개발후
배포시 pm2로 변경 작업하고 있습니다.
그런데 pm2 cluster -0 (CPU개수) 로 실행시
if(Cluster.master === true) 해당 코드는 동작을 안하는것 같습니다.
그리고 모니터링시 마지막 프로세스만 CPU가 100%가 넘어도 한개의 프로세스로 모든 test를 처리합니다.
위2가지 문제가 무엇인지 질문 드립니다.
답변 1
0
지금 현재 프로세스 수가 몇 개인가요? os.cpus().length 해서 알려주세요.
그리고 해당 부분 소스코드도 올려주세요.
0
프로세스 개수는 4개입니다. nodemon으로 하면 '<<<<SERVER STAR>>>' log가 찍히고
pm2 로 하면 Master 로그 안찍히고 else문만 동작하구요
마지막에 생긴 Cluster로만 이벤트 처리하고 있어요 CPU 100% 넘게 부하걸어도 마찬가지입니다.
추가 질문으로는 pm2 kill 했을때 log로 남기고 싶은데 process.on('SIGKILL', shutDown);으로는 동작을 안하네요ㅜ
const express = require('express');
const morgan = require('morgan');
const dotenv = require('dotenv');
const os = require('os');
const cluster = require('cluster');
const webSocket = require('./socket.io');
const logger = require('./service/loggerService');
const pm2 = require('pm2');
cluster.schedulingPolicy = cluster.SCHED_RR;
//dotenv 에서 config를 가져와야 아래 mongo DB 연결시 id pw를 불러와 활용할 수 있다.
dotenv.config();
if(cluster.isMaster)
{
logger.info(`<<<<<< SERVER START >>>>>>>>>>>`);
for(var i = 0; i < os.cpus().length; i++)
{
cluster.fork();
}
}else {
logger.info(`<<<<<< ClUSTER START >>>>>>>>>>>`);
const app = express();
app.set('port', 80);
app.use(express.json());
const connectMongoDB = require('./schemas');
const barCodesRouter = require('./routes/barCodes');
const usersRouter = require('./routes/users');
connectMongoDB().then(() => {
const expressServer = app.listen(app.get('port'), () => {
logger.info(`${app.get('port')}번 포트에서 대기중`);
});
webSocket(expressServer);
});
app.use(morgan('combined'));
app.use('/barCodes', barCodesRouter);
app.use('/users', usersRouter);
app.use((req, res, next) => {
//생략
});
app.use((err, req, res, next) => {
//생략
}
}
process.on('SIGTERM', shutDown);
process.on('SIGINT', shutDown);
process.on('SIGKILL', shutDown);
function shutDown() {
let clusterProcess = cluster.isMaster ? ` MASTER SERVER [pid:${process.pid}] `: ` WORKER SERVER [pid:${process.pid}] `;
logger.info(`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<${clusterProcess}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`);
process.exit(0);
setTimeout(() => {
logger.info(`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<${clusterProcess}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`);
process.exit(1);
}, 10000);
}
0
pm2로 하면 pm2가 내부적으로 cluster 모드를 실행하므로 cluster.isMaster가 실행 안 됩니다.
pm2를 쓸 때는 cluster 모듈 쓰실 필요 없습니다.
리눅스 노드 설치시 패키지
0
159
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
904
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2281
2
a[title] 질문드립니다
0
375
1
리뉴얼 강의 및 공부 방법
0
581
1
jwt decode
0
1128
1
node.js 교과서 3판 질문드립니다
0
391
1
passport와 jwt
0
432
1
리뉴얼 강의
0
417
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
353
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
481
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
505
2
nunjucks res.render('error'); 작동을 안합니다.
0
511
1
질문있습니다.
0
346
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3535
1
수업자료는 어디있나요?
0
366
1
질문 있습니디
0
235
1
multer 사용시 file 외 name값은 못받나용?
0
416
1
코드 중복 부분 질문드립니다.
0
298
1
api 만드는 이유 질문드립니다.
0
286
1
Strategy의 done에 대해 질문드립니다.
0
361
1
안녕하세요 fs 권한 관련 질문드립니다
0
445
1
시퀄라이즈 연결질문...
0
492
2
res.setHeader vs res.cookie
0
1784
3





