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を試みていますか?オペレーティングシステムの「ポートを使用しているプロセスを見つける」のようにグーグルできます
tanaydin


1
ファビコンはキャッシュされます。netstatコマンドプロンプトで試すか、Telnetの同等機能(PuTTYなど)を使用してlocalhost:3000に接続することもできます。
Blorgbeardは2016

5
「サーバーがポート3000で起動しました」の後に「ポート3000はすでに使用されています」というメッセージが表示されます。アプリの同じポートでもう一度リッスンを開始しようとしているのですか?
Blorgbeardは2016

6
私の推測では、app.listen()別のアプリの2つのステートメントが、.listen()そのポートでサーバーを起動しようとしています。1つ目は機能し、2つ目はエラーを報告します。コードでを検索します.listen
jfriend00 2016

回答:


268

そのプロセスを強制終了する方法を検索できます。

Linux / Mac OSの場合(sudo) runは、ターミナルでこれを検索します。

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

Windowsの場合:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

変更tskillのためtaskkillのgit bashで


2
私はWindowsで他の多くのソリューションを試しましたが、これはポートを独占している奇妙なプロセスを見つけました。Windowsでの作業に加えてLinuxのアプローチも含めることで賛成票を獲得しました。
truedat101 2018

2
tskillがWindowsで機能しませんでした。taskkill / F / PID myPIDhere-this working
snersesyan

2
私はのみで何も得るlsofが、とsudo lsof 私は何かを得る、そしてプロセスは、この問題を解決することを殺します。
user985366

実行中のプロセスのPIDを動的に取得して強制終了する方法はありますか?何らかの理由で、手動で製品にデプロイするたびにこれを行う必要があります。サイドノート、これがPM2に関連しているかどうか確認してください。
S_W

git-bashではtaskkillは機能しませんでしたが、tskillは機能しました。ありがとう。
nickcamillo

34

@sovaが提案したように、時々それが起こります。通常、アプリを実行している端末ウィンドウがバックグラウンドで隠れています。そして私もそうです。

ターミナルを長時間開いていると、そうです、そうです、プロセスを停止します。しかし、時にはバックグラウンドで止まらなかった。したがって、最善の解決策は、ターミナルを閉じてから再起動することです。それはあなたの問題を解決します。私の場合それはうまくいくので。

また、

sudo lsof -i:<PORT_NO>

現時点ではインスタンスを閉じていますが、バックグラウンドでプロセスを停止できません。一度だけ

sudo kill <PID>

動作しますが、コードを更新して保存すると、Nodemon同様にこの問題が再び発生します

ターミナルを終了すると問題が解決します。または

  killall -9 node

2
lsofもnetstatも何も返しませんでしたが、ポートを使用するプロセスがまだあるようです。killall -9 nodeサーバーをローカルで実行できた後。
Julsteri

killall -9ノードコマンドに感謝します。goorm IDEで動作しました
ifhy

23

これを参考にしてください。この単一のコマンドラインは、特定のポートで実行されているプロセスを強制終了できます。

npx kill-port 3000

ここに画像の説明を入力してください


複数のポートを強制終了します。

npx kill-port 3000 8080 4200

22

Windowsの場合、タスクマネージャはノードプロセスの実行を確実に表示します。プロセスを強制終了しようとすると、問題が解決します。


21

私も同じ問題を抱えていました。(以下の手順はWindows 10で正常に機能します):

  1. タスクマネージャーを開く(Ctrl+ Alt+を押す)Delete
  2. 「プロセス」タブを選択します
  3. 「Node.js:Server-side JavaScript」を検索します
  4. それを選択し、「タスクの終了」ボタンをクリックします

これで実行できます npm start

お役に立てば幸いです。


7

私は同じことを見て、上記のすべての提案を試みましたが、成功しませんでした。ここに私のためにそれを解決する手順があります:-無線LANをオフにします-npmスタート(これはうまくいくはずです)-無線LANをオンにします

根本的な問題が何であるかは正確にはわかりませんが、それで解決しました。


私にも同じことが起こりました。 netstat -anoリストポート3000を使用して何もしませんでした
ネイサン

正直なところ、これは私にとっても解決しました。明らかにポート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'"
  }
}

これ${PORT:-3000} -t | xargsにより、アプリがクラッシュするたびにnodemonが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

#特定のポートを見るためのコマンドライン

コマンドで:

$ netstat -ano | find "14228"

バッシュで:

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

# "tasklist"コマンドを使用してnode.exeを検索

コマンドで:

$ tasklist | find "node"

バッシュで:

$ 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を使用してプロセスを停止できます。

または、おそらくcopy / pasta =)のためにポートを複数回リッスンしています


助けてくれてありがとう!他のターミナルウィンドウを開いていませんが、他に確認する必要があるものはありますか?
user2573690

ノードまたはnpmプロセスを見つけて終了します。それでもファンクがある場合は、マシンを再起動するか、別のポートを選択して作業します。ポート3000または8080 でなければならない理由は本当にありません
sova

新しいノードアプリを作成してポート3000で起動したところ、問題なく動作しているようですが、既存のプロジェクトを実行しようとすると、ポートが使用中であると表示されます。この問題が発生したことがありますか?
user2573690

@ user2573690これまでに遭遇したことはありませんが、おそらく複数のjsファイル(app.jsやindex.jsなど)があり、1つが.listen()複数回呼び出されているでしょうか?
ソバ2016

2
ありがとうございました!私はそれを理解することができました、私は何度もポートを聞いていました、コピー/パスタ事故!回答を編集してその部分を追加できる場合は、マークを付けます。再びありがとう!
user2573690 2016

5

タスクマネージャーを開きます(Ctrl + Alt + Delキーを押します。「プロセスタブ」を選択します。「Node.js:サーバー側JavaScript」を検索します。それを選択し、「タスクの終了」ボタンをクリックします。


2

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


2

私は2時間かけて、なぜEADDRINUSEアプリをsartできないのか(他のnode-expressサーバーは問題ありませんでした)を見つけるのに費やしました... lazyConnect: true, データソース構成に追加した後に機能し始めました 。

それが役に立った理由を私に尋ねないでください。私は知らない。同じ問題を抱えている人のために、ここにこの情報を載せています。


根本的な原因を見つけるのに役立つ可能性のある解決策と解決策に賛成です。
-Titou、

2

WindowsでGit Bashを使用してこの問題が発生しました。私はnpm start、または実行しnode app.jsます。まもなくCtrlキー+ Cでそれを終了して、再度使用してサーバを起動しようとした後、npm startまたはnode app.js、私は、このエラーメッセージが表示されます。

ただし、通常のWindowsコマンドプロンプトでこれを行うと、正常に動作します。

または別の方法でそれを行うことができます。タスクマネージャーを開き、「Node.js:Server-side JavaScript」行を見つけますそれを選択してタスクを終了します。これで動作するはずです。

ありがとう。


2

1つのポートのみを閉じたい場合は、このコマンドを実行してください。 kill -9 $(lsof -t -i:3000)

違いpkillkill誰かが粘土を処理することです。killでは、フィルターを適用します。必要なポートを停止するだけです。

この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を開いてみてください。localhost:3000アドレスバーに入力するだけです。

アプリが開いた場合は、以前のアプリがnpm runまだアクティブであることを意味します。これで、同じアプリを設計している場合、または別のアプリを実行したい場合は、コードに変更を加えてその効果を確認することができます。(以前に実行していたアプリのindex.jsで)コードを少し調整し、おそらくブラウザのタブを更新してクラッシュさせてください;)...今すぐ実行してくださいnpm run start新しいアプリディレクトリからもう一度してください。お役に立てれば!:)

または

タスクマネージャーを開くと(WINDOWS_KEY + X>タスクマネージャー)、[Node.js:Server-side JavaScript]行が表示されます。それを選択してタスクを終了します。



そうでない場合は、.envアプリのファイルを変更してport:3002、新しいアプリを含めて実行します。これにより、2つの異なるアプリを異なるポートで実行できます。乾杯!!




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によって再起動のために時間内にシャットダウンしていなかったときだったと思います。multerを使用して問題を経験しました。


必要に応じて遅延を調整します。
Kalkhas

0

サーバーまたはアプリのlisten()メソッドが2か所に追加される場合があります。アプリケーションの起動についてlisten()メソッドを検索します。これは、サーバーがポートXXXXで開始され、ポートXXXXがすでに使用されているため、メッセージが横並びで返される理由です。


0

私の状況では、VS Codeを使い始めたばかりで、Sequelizeを使用したチュートリアルに従っていました。最後に、listen()が入ったbin / wwwファイルがありました。私はこれについて知らず、node app.jsを実行してアプリを実行していましたが、機能しなかった場合は、.listen()を使用して高速サーバーに追加しました(正常に機能しました)。

しかし、nodemonとVSCodeの使用を開始したとき、それはbin / wwwを指していたため、私のapp.jsが必要でした。

簡単に言えば、app.jsに.listen()を追加し、それを追加せずにbin / wwwを実行する必要があるときにapp.jsを直接実行していました。


0

Ubuntuは第1のポート番号を使用してプロセスをつかむに:須藤のlsof -i:3000:プロセスPIDが使用コマンド4493であれば、次に、例えば、プロセスを殺すためにkillコマンドを使用して殺す4493 Mac用の、またはウィンドウは、関連するコマンドを見つけます。

ここに画像の説明を入力してください


0

MongoDBまたはこのポートで以前に実行した別のアプリがあるため、この問題を解決しました。解決するには、タスクマネージャーからプロセスを強制終了するか、ポートの番号を3000から他のポートに変更します。


0

とても簡単です。2つの簡単なステップで修正できます。

  1. 「PORT」という名前のキー/エントリがある場合は、環境変数を確認してください。
  2. 見つかった場合は、そのエントリを削除するか、別の名前に変更します。

他のプログラムがその変数を使用していることがわかりました。通常、react-scriptsを開始すると、PORTというタイトルの環境変数が検索されます。



-2

次のコマンドを入力して、同じポートで実行されているプロセスを確認します。

sudo ps -ef

それぞれのノードポートで実行されているプロセスを見つけて、ノードを強制終了できます

kill -9 <node id>

それでも問題が解決しない場合は、すべてのノードを強制終了します

killall node

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.