pm2를 사용하다 보면 이런 에러를 많이 마주친다.
특히 pm2 start npm --name service-name -- start 이런식으로 pm2 명령어로 npm을 실행하게 되면 자주 문제가 발생하였다.
이 문제는 2가지 원인이 겹쳐서 발생하였다.
1. npm을 pm2로 실행하게 되면 해당 프로세스가 kill이 되면 port를 점유하고 있는 node 프로세스는 죽지않고 pm2에서 관리하는 npm 프로세스만 죽게된다.즉, 죽은 프로세스 != 포트를 점유하고 있는 프로세스가 되는 현상이 발생한다.
2. 나의 경우 프로세스 kill을 날리던 주체는 github action임을 밝혀졌다.


GitHub Actions Runner는 job이 종료될 때 다음 환경 변수를 기준으로 동작한다.
RUNNER_TRACKING_ID
이 환경 변수가 설정된 상태에서 실행된 프로세스는
job 종료 시 Runner가 자동으로 kill 신호를 보낸다.
여기서 중요한 점:
Runner가 kill하는 대상은 PM2가 관리 중인 프로세스
하지만 PM2가 관리하는 것은 node가 아니라 npm이다.
따라서 Runner는 npm을 죽이고,
node는 그대로 살아남아 고아 프로세스가 된다.
이 문제는 한동안 PM2 문제, 포트 문제, Next/Nest 문제로 오해되었다.
하지만 실제 원인은:
PM2 + npm 실행 방식 + GitHub Actions Runner의 kill 정책이 충돌한 것
이었다.
PM2는 반드시 Node 프로세스를 직접 관리하도록 하는게 좋은 것 같다.
'개발 > 문제해결' 카테고리의 다른 글
| Hairpin NAT 문제 해결: 내부 DNS서버 운영 (0) | 2025.10.12 |
|---|