PM2는 Node.js 애플리케이션을 관리하는 데 사용되는 프로세스 관리자입니다. ecosystem.config.js 파일을 사용하여 PM2의 동작을 설정할 수 있습니다. 이 파일에서는 애플리케이션의 실행 환경, 클러스터 모드 및 인스턴스 수를 설정할 수 있습니다. 아래에 ecosystem.config.js 파일의 구성과 리퀘스트 처리량을 고려한 스레드 수 설정 방법을 설명합니다.
ecosystem.config.js 파일 설명
ecosystem.config.js 파일은 PM2 설정을 위한 JavaScript 파일입니다. 이 파일을 통해 애플리케이션을 어떻게 관리할지 설정할 수 있습니다.
기본 구성 예제
module.exports = {
apps: [
{
name: 'cloud-album-backend',
script: 'dist/main.js', // 실행할 스크립트 경로
instances: 'max', // CPU 코어 수만큼 인스턴스를 실행
exec_mode: 'cluster', // 클러스터 모드 사용
env: {
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
},
watch: true, // 파일 변경 감지하여 재시작 (개발 환경에서 유용)
max_memory_restart: '200M', // 메모리 사용량 초과 시 재시작
},
],
};
주요 설정 옵션
- name: 애플리케이션의 이름.
- script: 실행할 스크립트 파일의 경로.
- instances: 실행할 인스턴스의 수. max로 설정하면 CPU 코어 수만큼 인스턴스를 실행합니다.
- exec_mode: 실행 모드. cluster 모드는 여러 인스턴스를 클러스터 모드로 실행하여 로드 분산을 합니다.
- env: 기본 환경 변수 설정.
- env_production: pm2 start ecosystem.config.js --env production 명령으로 실행 시 적용될 환경 변수 설정.
- watch: 파일 시스템을 감시하여 파일이 변경되면 애플리케이션을 재시작합니다.
- max_memory_restart: 설정된 메모리 사용량을 초과할 때 애플리케이션을 재시작합니다. 예: '200M' 또는 '1G'.
리퀘스트 처리량을 고려한 스레드 수 설정
스레드 수 설정 방법
- 클러스터 모드 사용: exec_mode를 'cluster'로 설정하고 instances를 'max'로 설정하면, PM2가 자동으로 CPU 코어 수에 따라 인스턴스를 생성합니다.
- 인스턴스 수 지정: 특정 인스턴스 수를 지정할 수도 있습니다. 예를 들어, 4개의 인스턴스를 실행하고 싶다면 instances: 4로 설정할 수 있습니다.
CPU 및 메모리 사용 최적화
- CPU 코어 수 파악:
- 일반적으로 인스턴스 수를 CPU 코어 수와 일치시키는 것이 좋습니다. 이는 애플리케이션이 병렬로 실행되어 각 코어를 최대한 활용할 수 있게 합니다.
- 코어 수가 많은 경우, 애플리케이션이 특정 한계점에서 성능 향상이 멈출 수 있으므로 실제로 사용량을 테스트하여 적정 수를 찾아야 합니다.
- 메모리 제한 설정:
- 메모리 사용량 감시: max_memory_restart를 설정하여 메모리 사용량이 특정 임계값을 초과하면 프로세스를 재시작합니다.
- 예: 메모리 사용량이 200M을 넘으면 재시작하도록 설정: 'max_memory_restart': '200M'.
환경에 따라 인스턴스 수를 조정하는 예제
module.exports = {
apps: [
{
name: 'cloud-album-backend',
script: 'dist/main.js',
// 프로덕션에서는 모든 코어 사용, 개발에서는 1개 인스턴스 사용
instances: process.env.NODE_ENV === 'production' ? 'max' : 1,
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
},
watch: process.env.NODE_ENV !== 'production', // 프로덕션에서는 감시 비활성화
max_memory_restart: '200M',
},
],
};
PM2 설정 파일 및 실행 예제
ecosystem.config.js 전체
module.exports = {
apps: [
{
name: 'cloud-album-backend',
script: 'dist/main.js',
// 프로덕션에서는 모든 코어 사용, 개발에서는 1개 인스턴스 사용
instances: process.env.NODE_ENV === 'production' ? 'max' : 1,
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
PORT: process.env.PORT || 3001,
},
env_production: {
NODE_ENV: 'production',
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
PORT: process.env.PORT || 3001,
},
watch: process.env.NODE_ENV !== 'production', // 프로덕션에서는 감시 비활성화
//max_memory_restart: '200M',
log_date_format: 'YYYY-MM-DD HH:mm Z', // 로그 타임스탬프 형식
output: './logs/out.log', // 일반 로그 파일 경로
error: './logs/error.log', // 에러 로그 파일 경로
merge_logs: true, // 여러 인스턴스 로그 병합
},
],
};
PM2를 사용한 실행 방법
# 설정 파일로 애플리케이션 실행 (기본 환경)
pm2 start ecosystem.config.js
# 프로덕션 환경으로 애플리케이션 실행
pm2 start ecosystem.config.js --env production
# 애플리케이션 상태 확인
pm2 status
# 애플리케이션 로그 확인
pm2 logs
# 애플리케이션 중지
pm2 stop cloud-album-backend
# 애플리케이션 재시작
pm2 restart cloud-album-backend
# PM2 실행 목록 저장
pm2 save
https://aube1225.blogspot.com/2024/07/pm2-nodejs.html
'Node.js' 카테고리의 다른 글
Node.js 서버가 사용하는 포트를 확인하고 해당 포트를 종료하는 방법 (1) | 2024.09.25 |
---|