inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

nodemon 과 pm2 차이

1372

Chi haeng Yi

작성한 질문수 2

0

nodemon으로 개발후 

배포시 pm2로 변경 작업하고 있습니다.

그런데 pm2  cluster -0 (CPU개수) 로 실행시 

if(Cluster.master === true) 해당 코드는 동작을 안하는것 같습니다. 

그리고 모니터링시 마지막 프로세스만 CPU가 100%가 넘어도 한개의 프로세스로 모든 test를 처리합니다. 

위2가지 문제가 무엇인지 질문 드립니다.

Sequelize mysql nodejs mongodb

답변 1

0

제로초(조현영)

지금 현재 프로세스 수가 몇 개인가요? os.cpus().length 해서 알려주세요.

그리고 해당 부분 소스코드도 올려주세요.

0

Chi haeng Yi

프로세스 개수는 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

Chi haeng Yi

답변 감사합니다. 마지막 Cluster로 모든 event 처리하는건 제가 잘못 코딩한게 있을까요?

0

제로초(조현영)

없습니다. 다만 pm2 kill이 아니라 pm2 stop을 해야 로그가 남을 것 같습니다.

리눅스 노드 설치시 패키지

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