콘텐츠로 이동

2024 04 19

2024-04-19

PM2

참고: https://engineering.linecorp.com/ko/blog/pm2-nodejs 참고: https://armadillo-dev.github.io/javascript/nodejs/node-js-pm2/ 참고: https://inpa.tistory.com/entry/node-%F0%9F%93%9A-PM2-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EC%84%9C%EB%B9%84%EC%8A%A4 참고: https://velog.io/@bwj0509/PM2%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%B0%B0%ED%8F%AC

  • 개요
    • Node.js는 기본적으로 싱글 쓰레드
      • 단일 CPU 코어에서 실행되기에, 멀티 코어 시스템은 낭비로 이어짐
    • 클러스터 모듈을 통해서...
      • 단일 프로세스 -> 멀티 프로세스
      • 마스터 프로세스에서 코어 수 만큼 워커 프로세스를 생성해서 모든 코어를 사용하게끔 로직
    • 노드 진영에서 PM2라는 Node.js 프로세스 매니저를 사용
    • 포그라운드 아닌, 백그라운드 실행 지원
  • PM2
    • 장점)
      • 서비스를 제공하고 있는 도중 갑자기 서버가 중지되어도 서버를 다시 켜줌
      • Node.js는 싱글 스레드 기반이지만, 멀티코어 or 하이퍼스레딩 사용 지원
      • 클라이언트로 오는 요청 로드밸런싱
    • 단점)
      • 메모리 공유 X => 세선 힘듦 => 주로 mem-cache, redis
  • 명령어
    ## 설치
    $ npm install -g pm2
    $ pm2 -version
    $ pm2 update
    
    ## 명령어
    pm2 start <file_name>
    pm2 stop app_name_or_id
    pm2 restart app_name_or_id
    pm2 stop all
    pm2 restart all
    pm2 list
    pm2 logs
    pm2 show app_name_or_id
    pm2 delete app_name_or_id
    pm2 monit
    
  • PM2 Fork
    • 코드 3 처럼 아무 옵션없이 어플리케이션 실행 시, 기본모드인 fork 모드로 실행
    • PM2는 새로운 프로세스를 기존의 것을 fork하면서 시작함 (새로운 v8 인스턴스로)
    • 다른 노드버전 운용도 가능
    • CPU intensive에 사용하기 좋음
    • 각 프로세스 고유한 메모리 공간을 가짐. 메모리 이슈가 타 인스턴스에 영향 X
  • PM2 Cluster
    • 코드 변경 없이 scale가능 (http, server, express 등등)
    • memory intensive에 사용하기 좋음
    • 마스터 프로세스 감독, 리소스 공유 및 작업 분배 조정
      • 한 프로세스가 종료되면, 마스터 프로세스가 다른 프로세스 생성해 무중단 서비스 제공