Node.js Port 3000은 이미 사용 중이지만 실제로는 그렇지 않습니까?


114

몇 주 동안 node.js 프로젝트로 작업 해 왔으며 훌륭하게 작동하고 있습니다. 일반적으로 나는 npm start내 앱을 실행하고 localhost, 포트 3000의 브라우저에서 볼 때 사용 합니다.

오늘 npm start를 사용하는 동안 다음 오류가 발생하기 시작했습니다.

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 

리소스 모니터를 확인했는데 포트 3000에서 실행중인 다른 프로세스가 없습니다.이 오류 메시지가 나타나는 이유는 무엇입니까?

내 app.js에서 포트를 설정하는 다음 코드가 있습니다. 이것이 올바르지 않습니까? 이전에는 잘 작동 했으므로 내가 뭘 잘못하고 있는지 잘 모르겠습니다.

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
    console.log('Server started on port '+app.get('port'));
});

도와 주셔서 감사합니다!


편집하다:

netstat 및 TCPView를 실행하여 포트를 사용하는 프로세스를 확인했지만 해당 포트를 사용하는 것이 없습니다. 랩톱을 다시 시작했지만 여전히 같은 오류가 발생합니다.


이 포트를 사용하는 다른 프로세스가 있습니다. 어떤 OS를 시도하고 있습니까? 당신처럼 구글 운영 체제에 대한 '하는 prosess가 사용하는 포트를 찾을'수
tanaydin


1
파비콘이 캐시됩니다. netstat명령 프롬프트에서 시도 하거나 텔넷에 해당하는 PuTTY (예 : PuTTY)를 사용하여 localhost : 3000에 연결할 수도 있습니다 .
Blorgbeard는 2016

5
"서버가 포트 3000에서 시작됨 " 후에 "포트 3000이 이미 사용 중입니다"라는 메시지 가 나타납니다. 앱에 동일한 포트에서 다시 수신을 시도하는 것이 있습니까?
Blorgbeard는 2016

6
내 생각 엔 app.listen().listen()에 해당 포트에서 서버를 시작하려는 두 개의 문 이 있다는 것 입니다. 첫 번째는 작동하고 두 번째는 오류를보고합니다. 코드에서 .listen.
jfriend00

답변:


269

해당 프로세스를 종료하는 방법을 검색 할 수 있습니다.

들어 리눅스 / 맥 OS는 검색 (sudo) run터미널에서 이것을 :

$ lsof -i tcp:3000
$ kill -9 PID

Windows의 경우 :

netstat -ano | findstr :3000
tskill typeyourPIDhere 

변경 tskill에 대한 taskkill자식 bash는


2
나는 창문에서 여러 가지 다른 솔루션을 시도했지만 이것은 포트를 잡아 먹는 이상한 프로세스를 발견했습니다. Windows에서 작업하는 것 외에도 Linux 접근 방식을 포함하여 찬성 투표를 받았습니다.
truedat101

2
tskill은 Windows에서 나를 위해 작동하지 않았습니다. 에서 taskkill / F / PID myPIDhere -이 작업
snersesyan

2
나는 아무것도 얻지 lsof못했지만 sudo lsof 나는 무언가를 얻었고 그 과정을 죽이면이 문제가 해결되었습니다.
user985366

실행중인 프로세스에 대한 PID를 동적으로 가져 와서 죽이는 방법이 있습니까? 어떤 이유로 수동으로 배포 할 때마다이 작업을 수행해야합니다. 참고로 이것이 PM2와 관련이 있는지 여부를 확인하십시오.
S_W

taskkill은 git-bash에서 나를 위해 작동하지 않았지만 tskill은 작동했습니다. 감사.
nickcamillo

34

@sova가 제안한 것처럼 때때로 발생합니다. 이것은 때때로 EADDR이 사용 중입니다. 일반적으로 백그라운드에서 여전히 앱을 실행중인 터미널 창이 숨겨져 있습니다. 그리고 그것은 나에게도 맞습니다.

오랜 시간 동안 터미널을 열었을 때 발생합니다. 맞습니다. 프로세스를 중지했습니다. 그러나 때로는 배경에서 멈추지 않았습니다. 따라서 가장 좋은 해결책은 터미널을 닫고 다시 시작하는 것입니다. 그것은 당신의 문제를 해결할 것입니다. 제 경우에는 작동합니다.

또한,

sudo lsof -i:<PORT_NO>

현재 인스턴스를 닫지 만 백그라운드에서 프로세스를 중지 할 수 없습니다. 그래서 한 번

sudo kill <PID>

작동하지만 코드를 업데이트하고 저장하면이 문제가 Nodemon 에서와 마찬가지로 다시 발생합니다 .

따라서 터미널을 종료하면 문제가 해결됩니다. 또는

  killall -9 node

2
lsof 또는 netstat는 아무것도 반환하지 않았지만 여전히 포트를 사용하는 프로세스가있는 것 같습니다. killall -9 node로컬에서 서버를 실행할 수있게 된 후 .
Julsteri

killall -9 node 명령에 감사드립니다. 그것은 goorm IDE에서 작동했습니다
ifhy

24

아마도 이것을 참고로 삼을 수 있습니다. 이 단일 명령 줄은 주어진 포트에서 실행중인 프로세스를 종료 할 수 있습니다.

npx kill-port 3000

여기에 이미지 설명 입력


여러 포트를 죽입니다.

npx kill-port 3000 8080 4200

22

Windows의 경우 작업 관리자는 실행중인 노드 프로세스를 확실히 보여줍니다. 프로세스를 종료하면 문제가 해결됩니다.


22

나는 같은 문제가 있었다. (아래 단계는 Windows 10에서 잘 작동합니다) :

  1. 작업 관리자를 엽니 다 ( Ctrl+ Alt+Delete )
  2. '프로세스 탭'을 선택하십시오.
  3. 'Node.js : Server-side JavaScript'를 검색합니다.
  4. 그것을 선택하고 '작업 끝내기'버튼을 클릭하십시오.

이제 실행할 수 있습니다. npm start .

도움이 되었기를 바랍니다.


7

나는 똑같은 것을 보았고 위의 모든 제안을 성공하지 못했습니다. 이 문제를 해결하는 단계는 다음과 같습니다.-Wi-Fi 끄기-npm 시작 (작동해야 함)-Wi-Fi 켜기

근본 문제가 무엇인지 정확히 모르겠지만 그 문제가 해결되었습니다.


나도 이런 일이 일어났다. netstat -ano포트 3000을 사용하여 아무것도 나열하지 않았습니다.
Nathan

젠장, 포트 3000에서 아무것도 실행되지 않았기 때문에이 문제도 해결되었습니다. Windows 업데이트 후이 문제가 발생하기 시작했습니다. WiFi를 끄는 것에 대해 생각하지 않았습니다. 해결 해주셔서 감사합니다 :)
3Dos

7

포트 3000을 소유하는 프로세스 종료

먼저 포트가 열려있는 프로세스를 종료하는 방법을 살펴 보겠습니다.

lsof 명령을 사용하여 주어진 포트가있는 PID를 검색 할 수 있습니다.

$ lsof -i :3000 -t
12345

그런 다음 다음을 수행하여이 프로세스를 종료 할 수 있습니다.

$ kill 12345

이것을 한 줄로 바꿔 봅시다.

lsof -i 3000 -t | xargs kill

환경 변수를 사용하여 서버 포트를 설정하는 경우 값을 하드 코딩하는 대신 지정할 수 있습니다.

lsof -i ${PORT} -t | xargs kill

마지막으로 환경 변수가 설정되지 않은 경우 기본적으로 포트 3000을 사용할 수 있습니다.

lsof -i ${PORT:-3000} -t | xargs kill

후크를 실행하기 위해 nodemon 가져 오기

Nodemon을 사용하면 nodemon.json 구성 파일을 통해 이벤트 후크를 설정할 수 있습니다.

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}

이로 인해 nodemon ${PORT:-3000} -t | xargs은 앱이 충돌 할 때마다 sh -c 'lsof -i : kill 명령 을 실행 하여 포트를 열어두고 생성 한 하위 프로세스를 종료합니다.

또는 당신은 이것을 시도 할 수 있습니다

fuser -k PORT-NO/tcp

예 :

fuser -k 3000/tcp

이것은 프로세스를 죽이는 아주 훌륭하고 깨끗한 해결책입니다. 매번이 작업을 수행하는 방법을 찾아야합니다. 이것이 제가 지금까지 본 것 중 가장 멋진 솔루션입니다!
twknab

어떤 프로세스에서 반환되지 않지만 필자는이 문제가 발생 lsof -i :3000 -t= \
xaunlopez

@xaunlopez 시도해보세요 fuser -k port-number/tcp
Afeesudheen

6

NodeJS 에서 nodemon 과 함께 Express 서버를 사용 하고있었습니다. 다음 메시지를 받았는데 오류 인 것 같습니다.

$ node ./bin/www
Port 3000 is already in use

모든 노드 서버 연결을 종료하는 경우 package.json 파일에 다음 코드를 추가 할 수있는 일반적인 솔루션이 있습니다.

"scripts": {
    "start": "node ./bin/www",
    "stop": "taskkill -f -im node.exe"
},

또한 Win 10 x64에서 여러 솔루션 windows 명령 및 bash를 찾았습니다.

내 모든 메모는 다음과 같습니다.


# 모든 NodeJS 서버 연결 종료

$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.

# 예 : Windows 작업 관리자를 열고 Windows에서 "node.exe"PID 번호를 확인합니다.

>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano

# Windows에서 포트 번호로 프로세스 종료 (예제)

도와주기 위해:

$ taskkill /?
$ tskill /?

코드 1 :

$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

코드 2 :

$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.

코드 3 :

$ tskill 14228

# 특정 포트를보기위한 명령 줄

cmd에서 :

$ netstat -ano | find "14228"

bash에서 :

$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228

# "tasklist"명령을 사용하여 node.exe 찾기

cmd에서 :

$ tasklist | find "node"

bash에서 :

$ tasklist | grep node
$ tasklist | grep node.exe
node.exe                     14228 Console                    2     48,156 K
node.exe                     15236 Console                    2     24,776 K
node.exe                     19364 Console                    2     24,428 K

5

이것은 때때로 나에게 발생합니다. EADDR이 사용 중입니다. 일반적으로 백그라운드에서 여전히 앱을 실행중인 터미널 창이 숨겨져 있습니다. 터미널 창에서 Ctrl + C를 눌러 프로세스를 중지 할 수 있습니다.

또는 복사 / 파스타 =)로 인해 포트를 여러 번 듣고있을 수 있습니다.


도와 주셔서 감사합니다! 다른 터미널 창이 열려 있지 않습니다. 확인해야 할 사항이 있습니까?
user2573690

노드 또는 npm 프로세스를 찾아 종료하십시오. 여전히 펑크가있는 경우 시스템을 재부팅하거나 작업 할 다른 포트를 선택하십시오. 그 이유 정말 없습니다 있어야합니다 포트 3000 또는 8080 일
SOVA

방금 새 노드 앱을 만들고 포트 3000에서 시작했는데 제대로 작동하는 것 같지만 기존 프로젝트를 실행하려고하면 포트가 사용 중이라고 표시됩니다. 이 문제가 있었습니까?
user2573690

@ user2573690 나는 전에 그것을 본 적이 없지만 .listen()여러 번 호출 하는 여러 js 파일 (app.js 및 index.js와 같은)이있을 수 있습니까?
SOVA

2
감사합니다! 나는 그것을 알아낼 수 있었다, 나는 여러 번 항구를 듣고 있었다, 복사 / 파스타 사고! 답변을 수정하고 해당 부분을 추가 할 수 있으면 표시하겠습니다. 다시 한번 감사합니다!
user2573690

5

작업 관리자 열기 (Ctrl + Alt + Del 누름 '프로세스 탭'선택 'Node.js : Server-side JavaScript'검색 선택 후 '작업 끝내기'버튼 클릭)


2

여기 Google에서 High Sierra에 대한 솔루션을 제공했습니다.

macOS의 네트워킹 설정에서 변경된 사항과 일부 앱 (ping 포함)이 localhost를 확인할 수 없습니다.

/ etc / hosts 편집은 수정처럼 보입니다 :

cmd : sudo nano /etc/hosts/ 내용127.0.0.1 localhost

또는 간단히 (/ etc / hosts가 비어 있다고 확신하는 경우) sudo echo '127.0.0.1 localhost' > /etc/hosts


2

나는 왜 EADDRINUSE내가 앱을 허용하지 않는지 알아내는 데 2 ​​시간을 보냈습니다 (다른 노드 익스프레스 서버는 괜찮 았습니다) ... 추가 한 후 작동하기 시작했습니다. lazyConnect: true, 데이터 소스 구성에 .

왜 도움이되었는지 묻지 마세요. 나도 몰라. 나는 동일한 문제를 가진 사람들을 위해이 정보를 여기에 넣습니다.


돕겠다는 의지와 근본 원인을 찾는 데 도움이 될 수있는 해결책에 찬성했습니다.
Titou 2010 년

2

Windows에서 Git Bash를 사용 하여이 문제가 발생했습니다. 나는 npm start, 또는 node app.js. 잠시 Ctrl + C로 종료하고 npm start또는 사용하여 다시 서버 시작을 시도한 후node app.js 나는이 오류 메시지가 표시됩니다.

그러나 일반 Windows 명령 프롬프트 로이 작업을 수행하면 제대로 작동합니다.

또는 다른 방법으로 할 수 있습니다. 작업 관리자를 열고 " Node.js : Server-side JavaScript "행을 찾습니다 . 그것을 선택하고 작업을 종료하십시오. 합니다. 이제 작동합니다.

감사.


2

하나의 포트만 닫으려면이 명령을 실행하십시오. kill -9 $(lsof -t -i:3000)

차이 pkillkill 누군가 프로세스 점토이다. 죽일 때 필터를 적용합니다. 원하는 포트를 중지하면됩니다.

pkill명령은 모든 노드 프로세스를 닫습니다. pkill -9 node

개발 중에 가끔 발생하는 메모리 누수를 방지하려면 pkill을 사용하십시오. 노드가 두 개 이상 있으면 모두 죽입니다.

package.json 의 스크립트 사용 도 예시됩니다.

"scripts": {
    "server:start": "cd server && yarn start",
    "server:restart": "cd server && yarn restart",
    "frontend:start": "cd frontend && yarn start",
    "frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
    "start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
    "restart": "pkill -9 node && start",
    "kill": "pkill -9 node"
},

1

브라우저에서 로컬 호스트를 열어보십시오. localhost:3000주소 표시 줄에 다음 을 입력하십시오 .

앱이 열리면 이전 앱 npm run이 여전히 활성 상태임을 의미합니다 . 이제 동일한 앱을 디자인하는 경우 코드를 변경하고 효과를 확인할 수 있습니다. 또는 다른 앱을 실행하려는 경우 이전에 실행 한 앱의 index.js에서 코드를 약간 조정하고 ( 아마 브라우저 탭을 새로 고침) 그것을 크래시하게 만드십시오;) ..... 이제 실행하십시오npm run start 새 앱 디렉토리에서 다시 하십시오. 도움이 되었기를 바랍니다! :)

또는

작업 관리자 (WINDOWS_KEY + X> 작업 관리자)를 열면 "Node.js : Server-side JavaScript"행이 표시됩니다. 그것을 선택하고 작업을 종료하십시오 .... 이제 작동합니다 !!



그렇지 않은 경우 새 앱 .env을 포함 port:3002하고 실행하도록 앱 파일을 변경하십시오 . 이렇게하면 서로 다른 포트에서 두 개의 개별 앱을 실행할 수 있습니다. 건배!!


1

Windows 사용자의 경우 작업 관리자 에서 Node.js의 모든 프로세스를 간단히 중지하십시오.

도움이되기를 바랍니다.


1

리눅스에서 간단

  • 터미널 열기
  • 프로세스에서 포트 해제-> kill $ (lsof -t -i : $ port)

1

나도 같은 문제가 발생했습니다. 해결하는 가장 좋은 방법입니다 (Windows 용) :

  1. 작업 관리자로 이동합니다 .

  2. 스크롤하여 이름이 지정된 작업 프로세스를 찾습니다. Node.js : 서버 측 JavaScript 참조를 위해 추가 된 이미지

  3. 이 특정 작업을 종료 하십시오.

됐어요! 이제 npm을 시작 하면 이전과 같이 작동합니다!



0

백그라운드에서 실행되는 관리자 프로세스 일 수 있으며이를 netstat표시하지 않습니다. 이 관리 프로세스의 PID를 찾는 데
사용 tasklist | grep node하고kill PID



0

package.json 스크립트에는 다음이 포함됩니다.

"start": "nodemon app.js --delay 1500ms"

문제는 이전 포트가 다시 시작하기 위해 nodemon에 의해 제 시간에 종료되지 않았을 때 나에게 있다고 생각합니다. 나는 멀터를 사용하여 문제를 경험했습니다.


필요에 따라 지연을 조정합니다.
Kalkhas

0

서버 또는 앱 listen () 메서드는 2 곳에 추가 될 수 있습니다. 응용 프로그램 시작에 대한 listen () 메서드를 검색하여 서버가 포트 XXXX에서 시작되고 포트 XXXX에서 이미 사용중인 메시지가 나란히 표시되는 이유입니다.


0

내 상황에서는 방금 VS Code를 사용하기 시작했고 Sequelize를 사용하여 자습서를 따랐습니다. 결국 나는 거기에 listen ()이있는 bin / www 파일이 있었다. 나는 이것에 대해 몰랐고 노드 app.js를 실행하여 내 앱을 실행하고 있었는데 작동하지 않았을 때 .listen () (잘 작동 함)을 사용하여 익스프레스 서버 항목에 추가했습니다.

그러나 nodemon과 VSCode를 사용하기 시작할 때 bin / www를 가리키고 내 app.js가 필요했습니다.

간단히 말해서 나는 .listen ()을 내 app.js에 추가했고 그것을 추가하지 않아야 할 때 직접 app.js를 실행하고 bin / www를 실행했습니다.


0

우분투에서는 먼저 포트 번호를 사용하여 프로세스를 가져옵니다 : sudo lsof -i : 3000 그런 다음 kill 명령을 사용하여 프로세스를 종료합니다. 예를 들어 프로세스 PID가 4493 인 경우 use 명령 : kill 4493 , Mac 또는 Windows의 경우 관련 명령을 찾습니다.

여기에 이미지 설명 입력


0

MongoDB 또는 이전에이 포트에서 실행 한 다른 앱이 있기 때문에이 문제를 해결했습니다. 따라서 작업 관리자에서 프로세스를 종료하거나 포트 번호를 3000에서 다른 것으로 변경합니다.


0

아주 간단합니다. 간단한 2 단계로 해결할 수 있습니다.

  1. 이름이 "PORT"인 키 / 항목이있는 경우 환경 변수를 확인하십시오.
  2. 찾은 경우 해당 항목을 삭제하거나 다른 이름으로 이름을 바꿉니다.

다른 프로그램이 해당 변수를 사용하고있는 것으로 나타났습니다. 일반적으로 반응 스크립트를 시작하면 해당 제목이 PORT 인 환경 변수를 찾습니다.


-1

nodemon을 실행하기 전에 먼저 mongod를 시작하십시오. 이 오류가 발생하지 않습니다. :)


-2

다음 명령을 입력하여 동일한 포트에서 실행중인 프로세스를 확인하십시오.

sudo ps -ef

각 노드 포트에서 실행중인 프로세스를 찾은 다음 다음을 수행하여 노드를 종료 할 수 있습니다.

kill -9 <node id>

문제가 계속되면 모든 노드를 종료하십시오.

killall node

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.