ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 참고

    https://velog.io/@juunini/%ED%95%A8%EB%B6%80%EB%A1%9C-sudo%EB%A5%BC-%EC%93%B0%EB%A9%B4-%EC%95%88%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

     

    '일차 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
Designed by Tistory.