Node.js Port 3000 sudah digunakan tetapi sebenarnya belum?


115

Saya telah bekerja dengan proyek node.js selama beberapa minggu dan telah bekerja dengan baik. Biasanya, saya gunakan npm startuntuk menjalankan aplikasi saya dan melihatnya di browser di localhost, port 3000.

Hari ini, saya mulai mendapatkan kesalahan berikut saat menggunakan npm start:

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 

Saya telah memeriksa monitor sumber daya dan saya tidak memiliki proses lain yang berjalan pada port 3000. Mengapa saya mendapatkan pesan kesalahan ini?

Di app.js saya, saya memiliki kode berikut untuk mengatur port ... apakah ini salah? Ini bekerja dengan baik sebelumnya jadi saya tidak yakin apa yang saya lakukan salah.

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

Terima kasih untuk bantuannya!


EDIT:

Saya telah mencoba menjalankan netstat dan TCPView untuk memeriksa proses apa yang menggunakan port, tetapi tidak ada yang menggunakan port itu. Saya juga mencoba memulai ulang laptop saya tetapi saya masih mendapatkan kesalahan yang sama.


Ada proses lain yang menggunakan port ini, sudah pasti. Sistem operasi mana yang Anda coba? Anda dapat mencari di Google seperti 'temukan proses mana yang menggunakan port' untuk sistem operasi Anda
tanaydin


1
Favicon akan di-cache. Anda juga dapat mencoba netstatdi command prompt, atau menghubungkan ke localhost: 3000 dengan setara dengan telnet - PuTTY, misalnya.
Blorgbeard keluar pada

5
Saya perhatikan Anda mendapatkan "Port 3000 sudah digunakan" setelah "Server dimulai pada port 3000" - apakah ada sesuatu di aplikasi Anda yang mencoba untuk mulai mendengarkan lagi di port yang sama?
Blorgbeard keluar pada

6
Dugaan saya adalah bahwa Anda memiliki dua app.listen()pernyataan di aplikasi Anda yang lain .listen()yang juga mencoba untuk memulai server di port itu. Yang pertama berfungsi, yang kedua melaporkan kesalahan. Telusuri kode Anda untuk .listen.
jfriend00

Jawaban:


269

Anda dapat mencari cara untuk menghentikan proses itu.

Untuk Linux / Mac OS cari (sudo) runini di terminal:

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

Di Windows:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

mengubah tskilluntuk taskkilldi bash git


2
Saya sudah mencoba sejumlah solusi lain di windows, tetapi yang ini menemukan proses aneh yang memonopoli port. Mendapat upvote untuk menyertakan juga pendekatan linux selain bekerja di windows.
truedat101

2
tskill tidak bekerja untuk saya di windows. taskkill / F / PID myPIDhere - ini berfungsi
snersesyan

2
Saya tidak mendapatkan apa-apa hanya lsofdengan sudo lsof saya mendapatkan sesuatu, dan membunuh proses itu memecahkan masalah ini.
user985366

Apakah ada cara untuk secara dinamis mendapatkan PID untuk proses yang sedang berjalan dan menghentikannya? Untuk beberapa alasan, saya harus melakukan ini setiap kali saya menerapkan untuk mendorong secara manual. Catatan samping, yakin apakah ini terkait dengan PM2 atau tidak.
S_W

taskkill tidak bekerja untuk saya di git-bash, tapi tskill berhasil. Terima kasih.
nickcamillo

34

Kadang-kadang itu terjadi, seperti yang diusulkan @sova. Kadang-kadang ini terjadi pada saya, EADDR sedang digunakan. Biasanya ada jendela terminal yang bersembunyi di latar belakang yang masih menjalankan aplikasi. Dan itu juga benar bagi saya.

Itu terjadi, ketika Anda telah membuka terminal untuk waktu yang lama, ya Anda benar, Anda telah menghentikan prosesnya. Tapi terkadang itu tidak berhenti di latar belakang. Jadi solusi terbaik adalah Anda menutup terminal dan memulainya lagi. Ini akan menyelesaikan masalah Anda. karena dalam kasus saya itu berhasil.

Juga,

sudo lsof -i:<PORT_NO>

tutup instance untuk saat ini tetapi tidak dapat menghentikan proses di latar belakang. Jadi untuk satu kali,

sudo kill <PID>

berfungsi, tetapi sekali lagi ketika kami memperbarui kode kami dan menyimpan, masalah ini terjadi lagi seperti pada Nodemon .

Jadi keluar dari terminal akan menyelesaikan masalah. ATAU

  killall -9 node

2
Baik lsof atau netstat tidak mengembalikan apa pun, namun tampaknya masih ada beberapa proses yang menggunakan port tersebut. Setelah killall -9 nodesaya bisa menjalankan server secara lokal.
Julsteri

terima kasih atas perintah killall -9 node. itu bekerja pada goorm IDE
ifhy

24

Mungkin Anda bisa menjadikan ini sebagai referensi. Baris perintah tunggal ini dapat menghentikan proses yang berjalan pada port tertentu.

npx kill-port 3000

masukkan deskripsi gambar di sini


Untuk mematikan banyak port.

npx kill-port 3000 8080 4200

22

Untuk windows, The Task Manager pasti akan menunjukkan proses node yang sedang berjalan. Cobalah untuk menghentikan prosesnya, itu akan menyelesaikan masalah.


22

Saya memiliki masalah yang sama. (Langkah-langkah di bawah ini berfungsi dengan baik di Windows 10):

  1. Buka pengelola tugas (tekan Ctrl+ Alt+ Delete)
  2. Pilih 'tab Proses'
  3. Telusuri 'Node.js: JavaScript sisi server'
  4. Pilih dan klik tombol 'Akhiri tugas'

Sekarang kamu bisa lari npm start.

Semoga membantu Anda.


7

Saya telah melihat hal yang sama dan mencoba semua saran di atas tanpa hasil. Berikut adalah langkah-langkah yang menyelesaikannya untuk saya: - matikan wifi - mulai npm (ini seharusnya berfungsi) - nyalakan wifi

Saya tidak begitu yakin apa akar masalahnya tetapi itu menyelesaikannya untuk saya.


Saya baru saja mengalami hal ini pada saya juga. netstat -anotidak mencantumkan apa pun yang menggunakan port 3000.
Nathan

Sialan, ini menyelesaikannya untuk saya juga karena jelas tidak ada yang berjalan pada port 3000. Saya mulai mengalami masalah ini setelah pembaruan Windows. Tidak pernah berpikir untuk mematikan WiFi. Terima kasih telah menyelesaikan ini :)
3 3

7

Membunuh proses yang memiliki port 3000

Pertama, mari kita lihat bagaimana kita dapat menghentikan proses yang porta terbuka.

Dengan menggunakan perintah lsof, kita dapat mengambil PID yang memiliki porta yang diberikan:

$ lsof -i :3000 -t
12345

Kemudian kita dapat menghentikan proses ini hanya dengan melakukan:

$ kill 12345

Mari kita ubah ini menjadi satu baris:

lsof -i 3000 -t | xargs kill

Jika Anda menggunakan variabel lingkungan untuk menyetel port server, kami dapat menetapkannya sebagai ganti hardcode nilai kami:

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

Terakhir, kita bisa default ke port 3000 jika variabel lingkungan tidak disetel:

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

Mendapatkan nodemon untuk mengeksekusi hook

Nodemon memungkinkan Anda mengatur event hook melalui file konfigurasi nodemon.json:

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

Ini akan menyebabkan nodemon menjalankan ${PORT:-3000} -t | xargsperintah sh -c 'lsof -i: kill setiap kali aplikasi Anda mogok, sehingga mematikan proses turunan yang dimunculkannya yang membuat port tetap terbuka.

atau Anda bisa mencoba yang ini

fuser -k PORT-NO/tcp

misalnya:

fuser -k 3000/tcp

Ini adalah solusi yang cukup bagus dan bersih untuk mematikan suatu proses. Harus melihat bagaimana melakukan ini setiap waktu, dan ini adalah solusi terbaik yang pernah saya lihat!
twknab

Saya mengalami masalah ini meskipun tidak ada proses yang kembali dari lsof -i :3000 -t= \
xaunlopez

@xaunlopez coba yang ini fuser -k port-number/tcp
Afeesudheen

6

Saya menggunakan server ekspres dengan nodemon di NodeJS. Saya mendapat pesan berikut dan tampaknya ada kesalahan:

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

Ada solusi umum yang jika Anda menghentikan semua koneksi server node, Anda dapat menambahkan kode ini di file package.json Anda:

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

Selain itu, saya telah menemukan beberapa solusi perintah windows dan bash pada Win 10 x64.

Semua catatan saya ada di sini:


# Hentikan semua Koneksi Server 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.

# Contoh: Buka Windows Task Manager dan lihat nomor PID "node.exe" di Windows

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

# Bunuh proses di Windows dengan Nomor Port (Contoh)

Untuk bantuan:

$ taskkill /?
$ tskill /?

Kode 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).

Kode 2:

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

Kode 3:

$ tskill 14228

# Baris perintah untuk melihat port tertentu

dalam cmd:

$ netstat -ano | find "14228"

dalam pesta:

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

# Temukan node.exe menggunakan perintah "tasklist"

dalam cmd:

$ tasklist | find "node"

dalam pesta:

$ 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

Ini kadang-kadang terjadi pada saya, EADDR sedang digunakan. Biasanya ada jendela terminal yang bersembunyi di latar belakang yang masih menjalankan aplikasi. Anda dapat menghentikan proses dengan ctrl + C di jendela terminal.

Atau, mungkin Anda mendengarkan port beberapa kali karena copy / pasta =)


Terima kasih untuk bantuannya! Saya tidak memiliki jendela terminal lain yang terbuka, ada hal lain yang harus saya periksa?
pengguna2573690

temukan proses node atau npm dan akhiri. jika Anda masih memiliki funk, reboot mesin, atau pilih saja port yang berbeda untuk digunakan. Benar-benar tidak ada alasan itu harus port 3000 atau 8080
sova

Saya baru saja membuat aplikasi node baru dan memulainya di port 3000 dan yang satu itu tampaknya berfungsi dengan baik, tetapi ketika saya mencoba menjalankan proyek saya yang ada, dikatakan port tersebut sedang digunakan. Apakah Anda pernah mengalami masalah ini?
pengguna2573690

@ user2573690 saya belum pernah menemukan itu sebelumnya, tetapi mungkin Anda memiliki beberapa file js (seperti app.js dan index.js) di mana seseorang memanggil .listen()beberapa kali?
sova

2
Terima kasih! Saya berhasil mengetahuinya, saya mendengarkan port beberapa kali, kecelakaan salin / pasta! Jika Anda dapat mengedit jawaban Anda dan menambahkan bagian itu, saya akan menandainya. Sekali lagi terimakasih!
pengguna2573690

5

Buka Pengelola Tugas (tekan Ctrl + Alt + Del Pilih 'Tab Proses' Cari 'Node.js: JavaScript sisi server' Pilih dan klik tombol 'Akhiri tugas'


2

Datang dari Google ke sini dengan solusi untuk High Sierra.

Sesuatu berubah dalam pengaturan jaringan macOS dan beberapa aplikasi (termasuk ping) tidak dapat menyelesaikan localhost.

Mengedit / etc / hosts sepertinya ada perbaikan:

cmd: sudo nano /etc/hosts/ konten127.0.0.1 localhost

Atau sederhananya (jika Anda yakin / etc / hosts kosong) sudo echo '127.0.0.1 localhost' > /etc/hosts


2

Saya telah menghabiskan 2 jam untuk mencari tahu mengapa EADDRINUSEtidak mengizinkan saya untuk sart aplikasi (server node-express lainnya baik-baik saja) ... itu mulai berfungsi setelah menambahkan lazyConnect: true, ke konfigurasi sumber data.

Jangan tanya saya mengapa itu membantu. Saya tidak tahu. Saya meletakkan info ini di sini hanya untuk orang yang memiliki masalah yang sama.


suara positif atas kesediaan untuk membantu DAN solusi yang dapat membantu menemukan akar masalah.
Titou

2

Saya mendapat masalah ini menggunakan Git Bash di Windows. Saya lari npm start, atau node app.js. Setelah menghentikannya dengan Ctrl + C segera dan mencoba untuk memulai server lagi menggunakan npm startatau node app.jskemudian saya mendapatkan pesan kesalahan ini.

Namun, ketika saya melakukan ini dengan Command Prompt Windows biasa , itu berfungsi dengan baik.

Atau Anda bisa melakukannya dengan cara lain. Buka Task Manager dan Temukan baris " Node.js: Server-side JavaScript ". Pilih itu dan akhiri tugas . Ini harus bekerja sekarang.

Terima kasih.


2

Jika Anda ingin menutup hanya satu port, jalankan saja perintah ini. kill -9 $(lsof -t -i:3000)

Perbedaan antara pkilldankill adalah seseorang yang mengolah tanah liat. Di kill Anda menerapkan filter. Anda hanya menghentikan port yang Anda inginkan.

The pkillperintah menutup semua proses simpul. pkill -9 node

Gunakan pkill untuk menghindari kebocoran memori yang terjadi sesekali selama pengembangan. jika ada lebih dari satu node, itu membunuh semuanya.

Penggunaan skrip di package.json juga dicontohkan.

"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

Coba buka localhost di browser Anda. Cukup ketik: localhost:3000di bilah alamat.

Jika aplikasi terbuka, itu berarti aplikasi Anda sebelumnya npm runmasih aktif. Sekarang, Anda dapat membuat perubahan pada kode dan melihat efeknya jika Anda mendesain aplikasi yang sama, atau jika Anda ingin menjalankan aplikasi lain, cukup ubah kode (di index.js dari aplikasi yang sebelumnya berjalan) sedikit dan ( mungkin menyegarkan tab browser) untuk membuatnya macet;) ..... Sekarang jalankannpm run start lagi dari direktori aplikasi baru Anda. Semoga ini membantu! :)

atau

Anda dapat membuka Task Manager (WINDOWS_KEY + X> Task Manager) dan Anda akan melihat baris "Node.js: Server-side JavaScript". Pilih itu dan akhiri tugas .... Seharusnya berfungsi sekarang !!



Jika tidak, ubah .envfile aplikasi Anda untuk menyertakan port:3002dan menjalankan aplikasi baru. Ini akan memungkinkan Anda menjalankan dua aplikasi terpisah di port yang berbeda. Bersulang!!


1

Untuk pengguna windows, cukup hentikan semua proses Node.js di Task Manager

Semoga bisa membantu


1

Sederhana di linux

  • Buka terminal Anda
  • Port bebas dari proses -> kill $ (lsof -t -i: $ port)

1

Saya juga mengalami masalah yang sama. Cara terbaik untuk mengatasinya adalah (untuk windows) :

  1. Buka Manajer Tugas .

  2. Gulir dan temukan proses tugas bernama. Node.js: JavaScript sisi server Gambar ditambahkan untuk referensi

  3. Akhiri tugas khusus ini.

Ini dia! Sekarang lakukan npm start dan itu akan berfungsi seperti sebelumnya!


0

Untuk pengguna windows, Anda dapat menggunakan alat CurrPorts untuk mematikan port yang sedang digunakan dengan mudah

masukkan deskripsi gambar di sini


0

Ini mungkin proses admin yang berjalan di latar belakang dan netstattidak menunjukkan ini.
Gunakan tasklist | grep nodeuntuk menemukan PID dari proses admin ini dan kemudiankill PID



0

Dalam skrip package.json termasuk:

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

Saya yakin masalahnya bagi saya saat port lama tidak dimatikan pada waktunya oleh nodemon untuk restart. Saya mengalami masalah saat menggunakan multer.


Sesuaikan penundaan sesuai kebutuhan.
Kalkhas

0

server atau aplikasi listener () mungkin ditambahkan di 2 tempat. Cari metode listening () di untuk aplikasi startups itu sebabnya kembali sebagai Server dimulai di Port XXXX dan Port XXXX sudah digunakan pesan datang berdampingan


0

Dalam keadaan saya, saya baru saja mulai menggunakan VS Code dan telah mengikuti tutorial menggunakan Sequelize. Pada akhirnya saya memiliki file bin / www yang memiliki listener () di sana. Saya tidak tahu tentang ini dan saya menjalankan aplikasi saya dengan menjalankan node app.js, ketika tidak berhasil saya kemudian menambahkan hal-hal server ekspres dengan .listen () (yang berfungsi dengan baik).

Tetapi ketika mulai menggunakan nodemon dan VSCode, itu diarahkan ke bin / www dan itu membutuhkan app.js.

Singkat cerita, saya telah menambahkan .listen () ke app.js saya dan menjalankan app.js secara langsung ketika saya seharusnya tidak menambahkannya dan menjalankan bin / www.


0

Di ubuntu pertama ambil proses dengan menggunakan nomor port: sudo lsof -i: 3000 lalu gunakan perintah kill untuk mematikan proses, misalnya jika proses PID adalah 4493 gunakan perintah: kill 4493 , untuk mac atau windows cari perintah terkait

masukkan deskripsi gambar di sini


0

Saya telah memecahkan masalah ini karena MongoDB atau ada aplikasi lain yang pernah Anda jalankan sebelumnya di port ini, jadi untuk mengatasinya, matikan proses dari task manager, atau cukup ubah nomor port dari 3000 ke yang lain.


0

Sangat sederhana. Anda dapat memperbaikinya dengan 2 langkah mudah.

  1. Periksa variabel lingkungan Anda jika ada kunci / entri dengan nama "PORT".
  2. Jika ditemukan, hapus entri itu atau ubah namanya menjadi yang lain.

Ternyata beberapa program lain menggunakan variabel tersebut. Biasanya ketika Anda memulai react-scripts, itu akan mencari variabel lingkungan dengan judul PORT itu.


-1

Sebelum menjalankan nodemon, silahkan mulai mongod terlebih dahulu. Anda tidak akan pernah mendapatkan kesalahan ini. :)


-2

periksa proses apa pun yang berjalan di port yang sama dengan memasukkan perintah:

sudo ps -ef

Anda dapat menemukan proses yang berjalan pada port node masing-masing, lalu mematikan node dengan

kill -9 <node id>

Jika masalah masih tetap ada maka matikan saja semua node

killall node

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.