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 프로세스 매니저를 사용
- 포그라운드 아닌, 백그라운드 실행 지원
- Node.js는 기본적으로 싱글 쓰레드
- PM2
- 장점)
- 서비스를 제공하고 있는 도중 갑자기 서버가 중지되어도 서버를 다시 켜줌
- Node.js는 싱글 스레드 기반이지만, 멀티코어 or 하이퍼스레딩 사용 지원
- 클라이언트로 오는 요청 로드밸런싱
- 단점)
- 메모리 공유 X => 세선 힘듦 => 주로 mem-cache, redis
- 장점)
- 명령어
- PM2 Fork
- 코드 3 처럼 아무 옵션없이 어플리케이션 실행 시, 기본모드인 fork 모드로 실행
- PM2는 새로운 프로세스를 기존의 것을 fork하면서 시작함 (새로운 v8 인스턴스로)
- 다른 노드버전 운용도 가능
- CPU intensive에 사용하기 좋음
- 각 프로세스 고유한 메모리 공간을 가짐. 메모리 이슈가 타 인스턴스에 영향 X
- PM2 Cluster
- 코드 변경 없이 scale가능 (http, server, express 등등)
- memory intensive에 사용하기 좋음
- 마스터 프로세스 감독, 리소스 공유 및 작업 분배 조정
- 한 프로세스가 종료되면, 마스터 프로세스가 다른 프로세스 생성해 무중단 서비스 제공