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.

pengguna2573690
sumber
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
sudahkah Anda mencoba stackoverflow.com/questions/48198/…
Isaac
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

Animesh Singh
sumber
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
techyaura
sumber
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
Penny Liu
sumber
22

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

PRAKASH THOMAS VARGHESE
sumber
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.

Mahyar
sumber
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.

James Smith
sumber
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
Afeesudheen
sumber
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
aygunyilmaz
sumber
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 =)

sova
sumber
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'

Omar bakhsh
sumber
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

sznowicki.dll
sumber
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.

tes30
sumber
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.

Amanullah Aman
sumber
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"
},
umutyerebakmaz.dll
sumber
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!!

Mohit Singh
sumber
1

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

Semoga bisa membantu

Muhammad Ashfaq
sumber
1

Sederhana di linux

  • Buka terminal Anda
  • Port bebas dari proses -> kill $ (lsof -t -i: $ port)
Oben Desmond
sumber
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!

Daim_Nickel_Penny
sumber
0

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

masukkan deskripsi gambar di sini

Zuhair Taha
sumber
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

tnoel999888
sumber
0

jika Anda menggunakan webstorm pastikan port default Anda bukan 3000 dari file -> pengaturan -> Build, Execution, Deployment -> Debugger Dan ada perubahan

Port server bawaan

dan setel ke "63342" atau lihat jawaban ini Ubah WebStorm LiveEdit Port (63342)

Muhammad Saleh
sumber
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.

Kalkhas
sumber
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

Anoop George
sumber
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.

Peter
sumber
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

Tuan
sumber
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.

Omar Abusabha
sumber
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.

Amini-Philips Ogelenye
sumber
-1

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

Pratiksha
sumber
-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
Mahaveer
sumber
-3

Membunuh semua port yang berjalan (mac):

killall node
Ryan Dhungel
sumber