-
Error: listen EADDRINUSE: address already in use일차 TIL 2023. 6. 18. 22:16
문제
ubuntu@ip-172-31-36-36:~/nodejs_spa_mall$ node app.js
node:events:491
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1740:16)
at listenInCluster (node:net:1788:12)
at Server.listen (node:net:1876:7)
at Function.listen (/home/ubuntu/nodejs_spa_mall/node_modules/express/lib/application.js:635:24)
at Object.<anonymous> (/home/ubuntu/nodejs_spa_mall/app.js:17:5)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
Emitted 'error' event on Server instance at:
at emitErrorNT (node:net:1767:8)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'EADDRINUSE',
errno: -98,
syscall: 'listen',
address: '::',port: 3000
}3000천번 포트가 이미 사용 중 이여서 오류가 생기고 열리지 않는 다는 것이다.
Nodejs 프로세스가 이전에 비정상적으로 종료 되었거나, 실제로 다른 프로세스가 사용 중일 때 생기는 오류이다.
해결
1. 윈도우에서 포트를 사용하는 프로세스 찾기
명령 프롬프트(cmd)를 열어 netstat 명령어를 통해 사용 중인 프로세스를 확인 할 수있다.
여기서 -ano (a 모든 포트 표시 , n(IP:PORT 형식으로 표시), o(PID표시) )옵션을 분혀
netstat -ano 를 입력한다.
2.프로세스 끝내기
netstat -ano 에서
로컬주소가 오류난 포트 번호와 같은 것을 찾아 PID번호를 확인한다
작업관리자 - 세부 정보 에서 PID 가 같은 프로세스를 끝내 주면 끝이 난다.
추가 문제 발생
netstat -ano 에서 3000번 포트사용이 확인이 되지 않았다.
이 문제가 발생한 이유는 pm2가 문제 것임을 어렴풋이 알아냈다.
이유는 3천번 포트도 사용하고 있지않은데, 사용 중 이라고하며 얼마 전까지 3천번포트를 사용해
작업을 하던 도중 pm2를 사용하기 위해 명령어를 입력하고 난 후에 문제가 지금의 문제가 발생하는 것이기 때문이다.
git bash에서 pm2 kill를 사용
kill 은 해당 프로세스를 끄는 명령어이다.
pm2가 문제인 것 같아 kill을 하여 끄면 되지않나 라는 생각을 했지만.
문제가 해결되지 않았다.
왜 해결이 되지 않는가?
내가 pm2 를 선언할때 sudo 로 강력한 루트권한을 주어버렸기 때문인듯 하다.
그렇기에 삭제할 때도 sudo를 사용해야하는 것이다.
Node.js v18.16.0
ubuntu@ip-172-31-36-36:~/nodejs_spa_mall$ sudo pm2 kill
[PM2] Applying action deleteProcessId on app [all](ids: [ 0 ])
[PM2] [app](0) ✓
[PM2] [v] All Applications Stopped
[PM2] [v] PM2 Daemon Stopped드디어 문제가 해결되었다(문제의 3천번포트 사용자 pm2 프로세스종료)
알게 된 것
sudo 는 최대한 사용 하지 않는 것이 좋다.
권한을 높게 부여하기 때문에 어디서 문제가 발생하게 될 지 모르며 작은 일을 할때 큰 권한을 줄 필요가 없기 때문이다.
혹시나 사용 했다면
sudo를 선언 하지않았다면 그냥 kill 을
sudo를 사용했다면 sudo kill 을 사용해 권한 등급을 맞추어줘야 프로세스를 종료할 수 있다.
오류 메세지 참고
https://jootc.com/p/201912253249
sudo 참고
'일차 TIL' 카테고리의 다른 글
23-06-20 TIL (0) 2023.06.21 23-06-19 TIL 로컬스토리지에 대해 (0) 2023.06.19 23-06-15 TIL (0) 2023.06.15 23-06-14 TIL (0) 2023.06.15 데이터의 종속성 (0) 2023.06.13