- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 오늘도 개발자가 안된다고 말했다
- sql
- TIL
- LEVEL1
- LEVEL 1
- TWIL
- TMIL
- 면접을 위한 cs 전공지식 노트
- CSS
- 리팩터링 2판
- 알고리즘
- javascript
- typescript
- LEVEL 2
- 코딩테스트
- Docker
- First Project
- 배포
- 에러핸들링
- MariaDB
- mongodb
- Refactoring
- Err-Handling
- 아고라스테이츠
- 코어 자바스크립트
- CRUD
- Git
- java
- 프로그래머스
- react
성장에 목마른 코린이
[Node.js] PM2 소개, 사용이유 및 사용법 본문
현재 회사에서 운영중인 프로젝트들을 PM2로 관리하고 있어서, PM2를 공부하게 되었습니다!
PM2는 Node.js 어플리케이션을 쉽게 관리할 수 있게 해주는 Process Manager입니다.
Node.js를 Express와 같은 프레임워크를 이용해 개발자들에게 사용성을 엄청 높여줍니다!
PM2 사용 이유
Node.js를 서버로 Back-End에 사용하려면 대표적인 고민이 있습니다.
1. Node.js를 Cluster mode로 실행시킬려면 어떻게 하지?
2. 메모리가 넘치면 어떻게 하지?
3. Node.js로 멀티 코어, 하이퍼 스레딩을 사용하고 싶다면 어떻게 하지?
4. 서비스를 제공하는 도중 갑자기 서버가 중지되면 어떻게 하지?
Node.js 어플리케이션을 cluster mode로 실행시킨다거나, 메모리가 넘친다거나,
오류로 인해 프로세스가 종료되는 등의 상황에 직면했을 때 각각의 상황을 사용자가 모두 신경 써서 처리해줄 수도 있지만,
너무 복잡하고 신경 써야 할 일들이 많아집니다.
PM2를 이용하면 이런 골치 아픈 문제들을 문제없이 해결할 수 있습니다!
PM2의 기능
PM2 Cluster mode (싱글 스레드 -> 멀티 스레드)
PM2의 cluster mode는 Node.js의 cluster module을 이용해
기본적으로 싱글 스레드인 Node.js를 멀티 스레드로 구동시켜줍니다.
싱글 스레드의 경우 구동 중인 서버의 CPU 개수와 상관없이 1개만 사용할 수 있기에 서버의 성능을 제대로 끌어내지 못합니다.
반면, 멀티 스레드는 최대 서버 CPU수(하이퍼스레딩을 지원한다면 2배)만큼 프로세스를 생성해 최대 성능을 끌어낼 수 있습니다.
Cluster mode 사용법
다음과 같이 ecosystem.config.js를 설정해주면 됩니다!
PM2 start
PM2 프로세스를 시작하기 위해서는 'pm2 start script or 설정파일명' 명령어를 사용하면 됩니다.
위에서 설정한 값을 기준으로 프로세스를 시작하면 아래 결과를 얻을 수 있습니다.
PM2 모니터링
실행된 PM2 프로세스를 모니터링 하려면 'pm2 monit' 명령어를 입력하면 됩니다.
명령어를 실행하면 아래의 항목들을 실시간으로 확인할 수 있습니다.
- 각 프로세스의 메모리, CPU 사용률, 현재 상태
- 선택된 프로세스의 로그
- 전체 프로세스의 Heap 사이즈, 사용률
- 어플리케이션 정보
PM2 reload
PM2 프로세스를 임의로, 특정 조건, 무중단으로 재시작 시킬 수 있습니다.
임의로 재시작
'pm2 reload all | app-name | process-id' 명령어를 통해 재시작이 가능합니다.
모든 프로세스, 특정 어플리케이션 아이디를 이용해 재시작이 가능합니다.
메모리 limit 재시작
임의 재시작 외에도 프로세스의 메모리가 지정된 제한선을 넘어서면 자동으로 reload 시킬 수 있습니다.
무중단 배포
서비스를 제공하고 있는 도중 갑자기 서버가 중지될때
참조:
- https://pm2.keymetrics.io/
- https://hellominchan.tistory.com/11
- https://armadillo-dev.github.io/javascript/nodejs/node-js-pm2/
- https://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
'Javascript > Node.js' 카테고리의 다른 글
[Node.js] Babel을 통해 ES5 -> ES6 사용하기 with nodemon (0) | 2022.11.23 |
---|---|
[Node.js] 프로젝트 시작 기본 세팅 (0) | 2022.11.23 |
[Node.js] CryptoJS (설치, 암호화 방식, 사용) (0) | 2022.11.16 |