PM2
PM2(Process Manager 2)
1. 프로세스 실행 및 이름 관리
가장 기본이 되는 프로세스 제어 명령어입니다.
-
애플리케이션 시작 (이름 지정):
pm2 start app.js --name "my-service" -
실행 중인 프로세스 이름 변경:
restart명령어를 통해 이름을 덮어쓸 수 있습니다.pm2 restart <ID_또는_기존이름> --name "new-service-name" -
클러스터 모드 실행: CPU 코어 수만큼 인스턴스를 실행하여 성능을 극대화합니다.
pm2 start app.js -i max
2. 상태 모니터링
현재 운영 중인 서비스의 리소스 상태를 확인합니다.
- 리스트 확인: 현재 실행 중인 모든 프로세스의 상태(CPU, Memory, Uptime 등)를 봅니다.
pm2 list # 또는 pm2 status - 실시간 대시보드: 터미널 내에서 화려한 UI로 리소스 점유율을 모니터링합니다.
pm2 monit - 상세 정보 확인: 특정 프로세스의 경로, 인자값, 환경 변수 등을 상세히 조회합니다.
pm2 show <ID_또는_이름>
3. 로그 관리
디버깅과 장애 파악을 위해 가장 중요한 부분입니다.
-
실시간 로그 확인:
pm2 logs <ID_또는_이름>
- 로그 파일 위치 확인: 로그가 저장되는 물리적 경로를 확인합니다.
pm2 show <ID_또는_이름> | grep "log path" - 로그 초기화: 누적된 로그 내용을 비웁니다.
pm2 flush
4. 설정 파일 활용 (Ecosystem File)
명령어에 옵션을 길게 붙이는 대신 ecosystem.config.js를 사용하면 복잡한 설정을 코드처럼 관리할 수 있습니다.
module.exports = {
apps: [
{
name: "my-api",
script: "./dist/main.js", // 빌드된 경로 등
instances: "max", // 클러스터 모드
exec_mode: "cluster",
env: {
// 기본 환경 변수
NODE_ENV: "development",
},
env_production: {
// --env production 옵션 사용 시
NODE_ENV: "production",
},
watch: false, // 파일 변경 시 자동 재시작 여부
max_memory_restart: "1G", // 메모리 과부하 시 자동 재시작
},
],
}- 설정 파일로 실행:
pm2 start ecosystem.config.js
5. 서버 재부팅 시 자동 실행 (Startup)
서버 자체가 재시작되었을 때 PM2 프로세스들이 자동으로 다시 뜨도록 설정합니다.
- 덤프 생성: 현재 실행 중인 프로세스 리스트를 저장합니다.
pm2 save - 스크립트 생성: 운영체제에 맞는 startup 스크립트를 생성합니다.
명령어를 치면 나오는 긴 한 줄의 코드를 복사해서 터미널에 다시 붙여넣어야 완료됩니다.pm2 startup
6. 기타 유용한 팁
- 프로세스 중지/삭제:
pm2 stop <ID> pm2 delete <ID> - 전체 일괄 처리:
all키워드를 사용합니다. (예:pm2 restart all) - 코드 변경 시 자동 재시작: 개발 환경에서 유용합니다.
pm2 start app.js --watch