잡동사니

반응형

질문

몇 주 동안 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'));
});

도와 주셔서 감사합니다!


EDIT:

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


답변1

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

Linux / Mac OS 검색의 경우 터미널에서 (sudo) 실행 :

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

Windows :

netstat -ano | findstr :3000
tskill typeyourPIDhere 

git bash에서 taskkill 에 대한 tskill 변경



답변2

@sova가 때때로 EADDR을 사용하는 나에게 이런 일이 발생합니다. 일반적으로 여전히 앱을 실행하는 백그라운드에 숨겨져있는 터미널 창이 있습니다. 저도 마찬가지입니다.

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

또한,

sudo lsof -i:<PORT_NO>

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

sudo kill <PID>

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

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

  killall -9 node


답변3

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



답변4

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

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

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

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



답변5

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

npx kill-port 3000

여기에 이미지 설명 입력


여러 포트를 죽입니다.

npx kill-port 3000 8080 4200


답변6

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

나는 근본적인 문제가 무엇인지 정확히 모르겠지만 그것은 나를 위해 해결되었습니다.



답변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 구성 파일을 통해 이벤트 hook를 설정할 수 있습니다.

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

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

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

fuser -k PORT-NO/tcp

예 :

fuser -k 3000/tcp


답변8

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


답변9

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

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



답변10

작업 관리자 열기 (Ctrl Alt Del 누름)'프로세스 탭'을 선택하십시오.'Node.js : Server-side JavaScript'를 검색합니다.그것을 선택하고 '작업 끝내기'button을 클릭하십시오



답변11

High Sierra에 대한 솔루션으로 Google에서 왔습니다.

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



답변12

나는 왜 EADDRINUSE 가 내가 앱을 sart하는 것을 허용하지 않았는지 알아내는 데 2 시간을 보냈다 (다른 node-express 서버는 괜찮았다) ... 추가 후 작동하기 시작했다<코드> lazyConnect : true,데이터 소스 구성에.

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



답변13

Windows에서 Git Bash를 사용 하여이 문제가 발생했습니다. npm start 또는 node app.js 를 실행합니다. Ctrl C로 잠시 종료하고 npm start 또는 node app.js 를 사용하여 서버를 다시 시작하려고하면이 오류 메시지가 표시됩니다.

하지만 일반 Windows 명령 프롬프트 로이 작업을 수행하면 정상적으로 작동합니다.

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

감사.



답변14

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

pkill kill 의 차이점은 누군가 클레이를 처리한다는 것입니다. 죽일 때 필터를 적용합니다. 원하는 포트를 중지하면됩니다.

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

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

package.json 의 script 사용도 예시됩니다.

"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"
},


답변15

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

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

또는

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



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



답변16

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

도움이되기를 바랍니다.



답변17

리눅스에서 간단

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


답변18

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

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

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

  3. 이 특정 작업을

    종료 합니다.

됐어요!이제 npm start 를 수행하면 이전처럼 작동합니다!



답변19

Windows 사용자의 경우 CurrPorts 도구를 사용하여 사용중인 포트를 쉽게 종료 할 수 있습니다.

여기에 이미지 설명 입력



답변20

백그라운드에서 실행되는 관리자 프로세스 일 수 있으며 netstat 에는이를 표시하지 않습니다.
작업 목록 사용 | grep node 를 사용하여이 관리 프로세스의 PID를 찾은 다음 PID를 종료



답변21

webstorm을 사용하는 경우 기본 포트가 3000이 아닌지 확인하십시오....에서파일-> 설정-> 빌드, 실행, 배포-> 디버거그리고 변화

내장 서버 포트

"63342"로 설정합니다.또는이 답변보기 WebStorm LiveEdit 포트 변경 (63342)



답변22

package.json script에는 다음이 포함됩니다.

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

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



답변23

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



답변24

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

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

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



답변25

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

여기에 이미지 설명 입력



답변26

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



답변27

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

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

다른 프로그램이 해당 변수를 사용하고 있음이 밝혀졌습니다. 일반적으로 반응 script를 시작할 때 제목이 PORT 인 환경 변수를 찾습니다.



답변28

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



답변29

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

sudo ps -ef

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

kill -9 <node id>

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

killall node


답변30

실행중인 모든 포트를 종료합니다 (mac) :

killall node


 

 

 

 

출처 : https://stackoverflow.com/questions/39322089/node-js-port-3000-already-in-use-but-it-actually-isnt

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band