Error: listen EADDRINUSE: address already in use :::3000 에러 해결 하기 | 우분투 서버

2022. 11. 16. 17:28백엔드 Back-end

address already in use ::: 3000 에러 해결하기

 

목차

- 오류 상황

- 해결 방안

 

오류 상황

AWS 우분투 서버에서 노드 프로그램을 돌리려고 명령어를 입력했는데 이런 오류메시지가 떳다.

> backend_test@0.0.1 start
> node app

node:events:491
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000

3000번 포트로 무언가 실행되고있기 때문에 노드 프로그램을 3000번 포트로 실행할 수 없다는 말

 

 

해결하기

어떤 포트로 무슨 프로그램이 돌아가고 있는지 알아보기 위해 다음 명령어를 실행한다.

 

방법 1

lsof 명령어 사용해서 pid (프로세스 아이디)를 알아내고 해당 포트로 실행되고 있는 프로세스를 중지(kill)시키는 방법

 

1. pid 알아내기

터미널에 다음 명령어를 친다.

lsof -ti :$PORT
예시) lsof -ti :3000

위 예시처럼 $PORT 부분을 자신이 알기 원하는 포트 번호로 변경해서 명령어를 입력하면 된다.

 

2. 해당 포트로 실행되고 있는 프로세스 중지시키기

터미널에 다음 명령어를 입력한다.

kill $(lsof -ti :$PORT)
예시) kill $(lsof -ti :3000)

만약 바로 킬이 안된다면 다음 SIGKILL 시그널을 같이 넘겨준다.

kill -9 $(lsof -ti :3000)

만약 권한이 없다는 메시지가 뜬다면 sudo 명령어로 관리자 권한으로 실행해준다.

kill -9 $(lsof -ti :3000)

 

3. 노드 프로그램을 실행해보면 오류 없이 잘 실행되는 것을 확인할 수 있다.

 

방법 2

 

1. 명령어 사용 위해 설치

sudo apt install net-tools

리눅스에 net-tools을 설치하고 나면 netstat 명령어를 사용할 수 있게 된다.

 

2. 다음 명령어를 실행

netsdtat -lntp

현재 3000번 포트를 사용하고 있는 프로그램의 PID를 알아낸다.

 

3. 1번 방법처럼 kill 명령어 수행

kill -9 $PID

$PID 부분은 알아낸 프로세스 번호로 대체해주면 된다.