[ 一日30分 인생승리의 학습법]node - pm2로 node.js 프로세스 관리하기 - 기본 명령어, 실행하기

 

최근 node.js 기반의 백엔드 서비스를 설계 + 제작 + 운영을 해야 할 일이 생겼고 

 

Node.js + express 기반의  실 운용 서버 운영에 대한 고려를 하게 되었다. 

 

기존에 supervisord를 사용한 supervisord에 대한 경험도 있었고 그에따라 프로세스 매니저가 필요하게 되었다. 

이러한 프로세스 매니저는 실제 운영중인 서버에서 어..? (서버에러 멈춰!!) 소리가 나올 확률을 엄청나게 줄여준다.

 

 

supervisord의 흐름 

 

 

 

Node에서 대표적으로 많이 사용하는 프로세스 매니저가 PM2였고 이에 따라 공부를 진행하기로 하였다. 

 

pm2의 역할

  • 프로세스가 종료되면 다시 실행 해 줄 수 있다.
  • 파일을 수정 했을 때 자동으로 프로세스를 껐다가 켜준다
  • 기존의 싱글스레드 기반 Nodejs를 cluster 기능을 통해 최대 16개(하이퍼 스레딩의 경우) 의 프로세스로 분할해서 동시에 사용 가능하게 진행해준다.
  • (worker_threads 를 사용하면 멀티스레딩 방식으로 사용 가능하다)
    공식 홈페이지에 명시된 수많은 기능들( https://pm2.keymetrics.io/ )

pm2 기본 명령어 

 

pm2 start example.js

pm2를 실행하는 명령, 서버 메인 파일을 기동할 때 사용한다. 

  • --watch 
    해당 프로젝트의 변경사항을 감지해서 서버를 자동으로 리로딩 해주는 hot reload 모드
    (nodemon과 유사하다, 주로 개발단계에서 즉시 반영되므로 매우 편리하게 사용 할 수 있다.)
  • -i max or (코어개수)
    싱글 스레드로 돌아가는 node.js를 보완하기 위한 클러스터 모드
    자체 클러스터를 지원해주기 때문에 편리하게 사용 가능하다.
    max 라고 작성하면 최대 코어개수로 클러스터링 진행하며 코어 개수를 입력 해도 된다. 
    최대 max 옵션으로 사용한 모습(코드 변경시에 자동으로 재시작한다)
  • -o <path>
    output에 대한 log 파일 위치를 정할 수 있다.
    (console.log등의 output이 조회 가능하다 )
     
  • -e <path>
    error에 대한 log 파일 위치를 정할 수 있다. 
     
  • -l [path]
    output 과 error 에 대한 log 파일 위치를 정할 수 있다. 

pm2 reload

수정한 사항을 프로세스에 반영하고 싶을 경우 프로세스를 재시작해준다. 

 

pm2 kill

실행중인 pm2 daemon을 종료시킨다.

 

pm2 list 

 

실행중인 pm2의 리스트들을 조회 할 수 있다. 

 

 

 

pm2 stop <name | id | namespace | script | all | json | stdin...>

특정 프로세스를 중단 할 때 사용한다.

 

 

프로세스 id 6 이 stopped로 변경되었다. 

 

 

pm2 delete <name | id | namespace | script | all | json | stdin...>

 

특정 프로세스를 제거할 때 사용한다

 

프로세스 id 6이 사라졌다

 

pm2 log

실행중인 PM2 Daemon의 log를 확인하는 명령어 

 

 

 

pm2 monit

pm2로 실행한 서버들의 상황을 한눈에 확인 할 수 있는 명령어

 

 

 

 

 

pm2 scale <app_name> <number> 

클러스터의 개수를 조정 할 수 있는 명령어 

 

pm2로 운영중에 스케일 in / out을 진행할 수 있다.

 

 

 

 

 

pm2 실 적용하기 

 

pm2를 활용해보기 위해 기본적인 

패키지를 설치해준다.

npm init
npm install pm2 -g
npm i express

 

설치가 잘 되었나 확인 하기 위해서 명령어를 입력한다. 

pm2 examples

 

 

 

pm2 examples 실행 

 

 

express 의 아주 기초적인 뼈대를 구축해준다.

 

index.js

const express =require('express')
const PORT = 8080;
const app = express();

app.use(express.json());
app.use(express.urlencoded({extended:false}));


app.get("/", (req,res) => {
    return res.json({hello: "world"});
})

app.listen(PORT, () => console.log(`this server listening on ${PORT}`))

 

이제 해당 index를 pm2를 활용해서 실행해준다.

 

pm2 start index.js

 

정상적으로 pm2가 활성화 되었다. 

 

 

 

이제 해당 pm2를 종료하고 

--watch 속성을 준다. 

pm2 kill

pm2 start index.js --watch

 

변경시마다 재 기동을 진행한다.

 

이제 클러스터링을 적용하기위해 -i 옵션을 줘 봤다.

pm2 kill

pm2 start index.js --watch -i max

 

 

최대 max 옵션으로 사용한 모습(코드 변경시에 자동으로 재시작한다)

 

 

 

 

 

위와같이 정상 동작하는것 을 알 수 있다. 

 

 

다음 포스팅에는 

pm2 + winston.js 를 활용한 에러 로깅 시스템

위 시스템을 Docker로 묶기까지 진행할 예정이다. 

 

 

참고 블로그

https://hellominchan.tistory.com/11 , https://jybaek.tistory.com/716https://engineering.linecorp.com/ko/blog/pm2-nodejs/#PM2%EB%A5%BC%ED%99%9C%EC%9A%A9%ED%95%9CNode.js%EB%AC%B4%EC%A4%91%EB%8B%A8%EC%84%9C%EB%B9%84%EC%8A%A4%ED%95%98%EA%B8%B0-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%9A%B4%EC%98%81%ED%95%98%EA%B8%B0

[출처] https://loy124.tistory.com/379

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
1080 [ 一日30分 인생승리의 학습법] [Elasticsearch] 기본 개념잡기 file 졸리운_곰 2022.06.02 4
» [ 一日30分 인생승리의 학습법]node - pm2로 node.js 프로세스 관리하기 - 기본 명령어, 실행하기 file 졸리운_곰 2022.05.28 3
1078 [ 一日30分 인생승리의 학습법][1탄!!]KrakenD가 무엇인가? 과연 Api Gateway로 으뜸인가요? file 졸리운_곰 2022.04.15 5
1077 [ 一日30分 인생승리의 학습법][API Gateway] Kong Gateway 설치 file 졸리운_곰 2022.04.15 3
1076 [ 一日30分 인생승리의 학습법] TeX_및_LaTeX_수식_문법 file 졸리운_곰 2022.03.19 17
1075 [ 一日30分 인생승리의 학습법] Visual Basic application on linux 졸리운_곰 2022.02.22 5
1074 [ 一日30分 인생승리의 학습법] Truffle을 이용한 DApp 개발환경 구성 file 졸리운_곰 2022.02.20 78
1073 [ 一日30分 인생승리의 학습법]LaTeX 활용해서 논문쓰장 file 졸리운_곰 2022.02.17 10
1072 [ 一日30分 인생승리의 학습법] LaTeX 초보자가 감을 잡는 것을 돕는 몇가지 팁 졸리운_곰 2022.02.17 7
1071 [ 一日30分 인생승리의 학습법] 수식 입력이 가능한 마인드맵 프로그램, 프리플레인(freeplane) file 졸리운_곰 2022.02.16 13
1070 [ 一日30分 인생승리의 학습법] Awesome Metaverse Awesome 짱!~ 메티버스 오픈소스 file 졸리운_곰 2022.02.13 4
1069 [ 一日30分 인생승리의 학습법] 제 NAS의 Docker 목록 file 졸리운_곰 2022.01.31 16
1068 [ 一日30分 인생승리의 학습법] gw basic 튜터리얼, 메뉴얼, A GW-BASIC Tutorial 졸리운_곰 2022.01.22 9
1067 [ 一日30分 인생승리의 학습법] Web Search Engine : 웹 검색 엔진 google/ naver 만들기 file 졸리운_곰 2022.01.17 20
1066 [ 一日30分 인생승리의 학습법] AILog 2 A logic programming language with probabilities and logical explanation and debugging faculities file 졸리운_곰 2022.01.16 7
1065 [ 一日30分 인생승리의 학습법] 소스 인사이트( source insight ) 사용법 file 졸리운_곰 2022.01.13 10
1064 [ 一日30分 인생승리의 학습법][메타버스란 무엇인가?] The Metaverse Has Already Arrived. Here’s What That Actually Means file 졸리운_곰 2021.12.29 15
1063 [ 一日30分 인생승리의 학습법] English to Logic, Truth-Functional Propositional Logic 졸리운_곰 2021.12.15 10
1062 [ 一日30分 인생승리의 학습법][실무행정] 기안문 공문서 기안문 작성법, 행정안전부 지침 및 시행 file 졸리운_곰 2021.12.11 12
1061 [ 一日30分 인생승리의 학습법][실무행정] 기안문 작성하기 졸리운_곰 2021.12.11 11
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED