Node.js Bağlantı Noktası 3000 zaten kullanılıyor ama aslında değil mi?


133

Birkaç haftadır bir node.js projesiyle çalışıyorum ve harika çalışıyor. Genellikle, npm startuygulamamı çalıştırmak ve onu localhost, bağlantı noktası 3000'de bir tarayıcıda görüntülemek için kullanırım.

Bugün, npm start kullanırken aşağıdaki hatayı almaya başladım:

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 

Kaynak izleyiciyi kontrol ettim ve 3000 numaralı bağlantı noktasında çalışan başka bir işlemim yok. Neden bu hata mesajını alıyorum?

App.js benim portu ayarlamak için aşağıdaki koda sahibim ... bu yanlış mı? Daha önce iyi çalıştı, bu yüzden ne yaptığımı bilmiyorum.

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

Yardım için teşekkürler!


DÜZENLE:

Bağlantı noktasını hangi işlemin kullandığını kontrol etmek için netstat ve TCPView çalıştırmayı denedim, ancak bu bağlantı noktasını kullanan hiçbir şey yok. Ayrıca dizüstü bilgisayarımı yeniden başlatmayı denedim ama yine de aynı hatayı alıyorum.


Bu portu kullanan başka bir işlem daha var, kesin. Hangi işletim sistemini deniyorsun? İşletim sisteminiz için 'hangi
işlemcinin


1
Site simgesi önbelleğe alınacaktır. Ayrıca netstatbir komut isteminde deneyebilir veya localhost: 3000'e telnet eşdeğeri - PuTTY ile bağlanmayı da deneyebilirsiniz .
Blorgbeard

5
"3000 numaralı bağlantı noktasında sunucu başlatıldıktan " sonra "Bağlantı noktası 3000 zaten kullanımda" mesajını aldığınızı fark ettim - uygulamanızda aynı bağlantı noktasında dinlemeye başlamaya çalışan bir şey var mı?
Blorgbeard

7
Benim tahminim, app.listen()uygulamanızda .listen(), o bağlantı noktasında bir sunucu başlatmaya çalışan iki ifadeniz olduğu. İlki çalışır, ikincisi hatayı bildirir. İçin kodunuzu arayın .listen.
jfriend00

Yanıtlar:


294

Bu süreci nasıl öldüreceğinizi araştırabilirsiniz.

For Linux / Mac OS arama (sudo) runTerminalde bu:

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

Windows'ta:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

git bash tskilliçin değişikliktaskkill


2
Pencerelerde bir dizi başka çözüm denedim, ancak bu, bağlantı noktasını saran tuhaf işlemi buldu. Windows üzerinde çalışmanın yanı sıra linux yaklaşımını da dahil ederek bir olumlu oy kazandı.
truedat101

2
tskill benim için pencerelerde çalışmadı. taskkill / F / PID myPIDhere - bu çalışıyor
snersesyan

2
Sadece hiçbir şey alamıyorum lsofama onunla bir sudo lsof şey elde ediyorum ve bu süreci öldürmek bu sorunu çözdü.
user985366

Çalışan işlem için PID'yi dinamik olarak almanın ve onu öldürmenin bir yolu var mı? Bazı nedenlerden dolayı, manuel olarak prod yapmak için her konuşlandırdığımda bunu yapmam gerekiyor. Yan not, bunun PM2 ile ilgili olup olmadığından emin olun.
S_W

1
taskkill benim için git-bash üzerinde çalışmadı, ama tskill işe yaradı. Teşekkürler.
nickcamillo

57

Belki bunu referans olarak alabilirsin. Bu tek komut satırı, belirli bir bağlantı noktasında çalışan işlemi öldürebilir.

npx kill-port 3000

görüntü açıklamasını buraya girin


Birden çok bağlantı noktasını öldürmek için.

npx kill-port 3000 8080 4200

2
bu harika çalıştı, teşekkürler
Aditya Patnaik

1
harika, mükemmel çalıştı.
Jeremy

1
Tonlarca başarısızlıktan sonra ... orada çalışan tek komut satırı !!!
A. D'Alfonso

1
Teşekkürler işe yarıyor !!!!
Crown Arka Ucu

38

Bazen @sova'nın önerdiği gibi olur Bu bazen bana olur, EADDR kullanımda. Tipik olarak, arka planda gizlenen ve uygulamayı çalıştıran bir terminal penceresi vardır. Ve bu da benim için doğru.

Uzun süre terminal açtığınızda olur, evet haklısınız, süreci durdurdunuz. Ama bazen arka planda durmadı. Bu yüzden en iyi çözüm, terminali kapatıp yeniden başlatmanızdır. Sorununuzu çözecektir. çünkü benim durumumda çalışıyor.

Ayrıca,

sudo lsof -i:<PORT_NO>

örneği şimdiki zaman için kapatın, ancak arka planda işlemi durduramaz. Yani bir kereliğine

sudo kill <PID>

çalışır, ancak yine kodumuzu güncelleyip kaydettiğimizde, bu sorun Nodemon'da olduğu gibi tekrar ortaya çıkar .

Yani terminalden çıkmak sorunu çözecektir. VEYA

  killall -9 node

4
Ne lsof ne de netstat bir şey döndürmedi, yine de bağlantı noktasını kullanan bazı işlemler var gibiydi. killall -9 nodeSunucuyu yerel olarak çalıştırmayı başardıktan sonra .
Julsteri

killall -9 düğüm komutu için teşekkürler. goorm IDE üzerinde çalıştı
ifhy

23

Ben de aynı sorunu yaşadım. (Aşağıdaki adımlar Windows 10'da sorunsuz çalışır):

  1. Görev yöneticisini açın ( Ctrl+ Alt+ tuşlarına basın Delete)
  2. 'İşlemler sekmesini seçin
  3. 'Node.js: Sunucu tarafı JavaScript'i arayın
  4. Onu seçin ve 'Görevi sonlandır' düğmesine tıklayın

Şimdi koşabilirsiniz npm start.

Umarım size yardımcı olur.


22

Windows için, Görev Yöneticisi kesinlikle çalışan bir düğüm işlemini gösterecektir. Süreci öldürmeye çalışın, sorunu çözecektir.


8

Ben de aynı şeyi gördüm ve yukarıdaki tüm önerileri başarılı olmadan denedim. İşte benim için çözen adımlar: - wifi'yi kapat - npm start (bu işe yaramalı) - wifi'yi aç

Kök sorunun ne olduğundan tam olarak emin değilim ama bu benim için çözdü.


Bu benim de başıma geldi. netstat -ano3000 numaralı bağlantı noktasını kullanarak hiçbir şey listelemedi.
Nathan

1
Vay canına, bu benim için de çözdü, çünkü 3000 numaralı bağlantı noktasında hiçbir şey çalışmıyordu. Bu sorunu bir Windows güncellemesinden sonra yaşamaya başladım. WiFi'yi kapatmayı asla düşünmedim. Bunu çözdüğünüz için teşekkürler :)
3Dos

8

3000 numaralı bağlantı noktasına sahip olan bir işlemi öldürmek

Öncelikle, açık bir portu olan bir işlemi nasıl öldürebileceğimize bir göz atalım.

Lsof komutunu kullanarak, verilen bağlantı noktasına sahip PID'yi alabiliriz:

$ lsof -i :3000 -t
12345

O zaman bu süreci sadece şunu yaparak öldürebiliriz:

$ kill 12345

Bunu tek satırlık bir şeye çevirelim:

lsof -i 3000 -t | xargs kill

Sunucu bağlantı noktasını ayarlamak için bir ortam değişkeni kullanıyorsanız, değerlerimizi kodlamak yerine bunu belirtebiliriz:

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

Son olarak, ortam değişkeni ayarlanmadıysa varsayılan olarak 3000 portunu seçebiliriz:

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

Hook'ları yürütmek için nodemon alma

Nodemon, nodemon.json yapılandırma dosyası aracılığıyla olay kancaları ayarlamanıza izin verir:

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

Bu, nodemon'un ${PORT:-3000} -t | xargsuygulamanız her çöktüğünde sh -c 'lsof -i: kill komutunu çalıştırmasına neden olur , böylece portu açık tutan ürettiği çocuk süreci öldürür.

ya da bunu deneyebilirsin

fuser -k PORT-NO/tcp

Örneğin:

fuser -k 3000/tcp

Bu, bir süreci öldürmek için oldukça güzel ve temiz bir çözüm. Bunu her seferinde nasıl yapacağıma bakmalıyım ve bu şimdiye kadar gördüğüm en güzel çözüm!
twknab

lsof -i :3000 -t= \
xaunlopez

@xaunlopez bunu deneyin fuser -k port-number/tcp
Afeesudheen

7

NodeJS'de nodemon ile ekspres sunucu kullanıyordum . Aşağıdaki mesajı aldım ve bir hata görünüyor:

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

Tüm düğüm sunucu bağlantılarını sonlandırırsanız, bu kodu package.json dosyanıza ekleyebileceğiniz genel bir çözüm vardır:

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

Ek olarak, Win 10 x64'te birkaç çözüm windows komutu ve bash buldum.

Tüm notlarım burada:


# Tüm NodeJS Sunucu Bağlantılarını Sonlandırın

$ 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.

# Örnek: Windows Görev Yöneticisini açın ve Windows'ta "node.exe" PID numarasına bakın

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

# Windows'taki bir işlemi Bağlantı Noktası Numarasına göre sonlandırma (Örnek)

Yardım için:

$ taskkill /?
$ tskill /?

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

Kod 2:

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

Kod 3:

$ tskill 14228

# Belirli bir bağlantı noktasına bakmak için komut satırı

cmd cinsinden:

$ netstat -ano | find "14228"

bash'da:

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

# "Tasklist" komutunu kullanarak node.exe'yi bulun

cmd cinsinden:

$ tasklist | find "node"

bash'da:

$ 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

7

Ben de aynı sorunla karşılaştım. Çözmenin en iyi yolu (Windows için) :

  1. Git Görev Yöneticisi .

  2. Kaydırın ve adlı bir görev süreci bulun. Node.js: Sunucu tarafı JavaScript Referans için resim eklendi

  3. End bu özel görevi.

İşte gidiyorsun! Şimdi npm başlayın ve eskisi gibi çalışacaktır!


6

Bu bazen bana oluyor, EADDR kullanımda. Tipik olarak arka planda gizlenen ve uygulamayı çalıştıran bir terminal penceresi vardır. İşlemi terminal penceresinde ctrl + C ile durdurabilirsiniz.

Ya da belki copy / pasta =) nedeniyle bağlantı noktasını birden çok kez dinliyorsunuz.


Yardım için teşekkürler! Açık başka terminal pencerem yok, kontrol etmem gereken başka bir şey var mı?
user2573690

herhangi bir düğüm veya npm işlemini bulun ve bitirin. Hala bir funk'ınız varsa, makineyi yeniden başlatın veya çalışmak için farklı bir bağlantı noktası seçin. Bunun 3000 veya 8080 numaralı bağlantı noktası olması için hiçbir neden yok
sova

Yeni bir düğüm uygulaması oluşturdum ve 3000 numaralı bağlantı noktasında başlattım ve bu iyi çalışıyor gibi görünüyor, ancak mevcut projemi çalıştırmayı denediğimde bağlantı noktasının kullanımda olduğunu söylüyor. Hiç bu sorunu yaşadınız mı?
user2573690

@ user2573690 Buna daha önce rastlamadım, ancak birden .listen()çok kez çağıran birden çok js dosyanız (app.js ve index.js gibi) olabilir mi?
sova

2
Teşekkür ederim! Çözmeyi başardım, limanı defalarca dinliyordum, kopyalama / makarna kazası! Cevabınızı değiştirebilir ve o parçayı eklerseniz, onu işaretlerim. Tekrar teşekkür ederim!
user2573690

5

Görev Yöneticisini açın (Ctrl + Alt + Del tuşlarına basın 'İşlemler Sekmesini' seçin 'Node.js: Sunucu tarafı JavaScript'i arayın seçin ve' Görevi sonlandır 'düğmesine tıklayın


3

Neden EADDRINUSEbir uygulamayı başlatmama izin vermediğini bulmak için 2 saat harcadım (diğer node-express sunucular iyiydi) ... lazyConnect: true, veri kaynağı yapılandırmasına ekledikten sonra çalışmaya başladı .

Bana neden yardımcı olduğunu sorma. Bilmiyorum. Bu bilgiyi buraya sadece aynı sorunu yaşayan insanlar için koyuyorum.


Yardım etme istekliliği ve temel nedeni bulmaya yardımcı olabilecek bir çözüm için oy verildi.
Titou

2

Google'dan High Sierra için bir çözümle buraya geldi.

MacOS ağ kurulumunda bir şey değişti ve bazı uygulamalar (ping dahil) localhost'u çözemez.

/ Etc / hosts dosyasını düzenlemek bir düzeltme gibi görünüyor:

cmd: sudo nano /etc/hosts/ içerik127.0.0.1 localhost

Veya basitçe (/ etc / hosts dosyanızın boş olduğundan eminseniz) sudo echo '127.0.0.1 localhost' > /etc/hosts


2

Windows'ta Git Bash kullanarak bu sorunu yaşadım. Koşarım npm startveya node app.js. Kısa bir süre Ctrl + C ile sonlandırdıktan sonra npm startveya kullanarak sunucuyu tekrar başlatmaya çalıştıktan node app.jssonra bu hata mesajını alıyorum.

Bunu normal Windows Komut İstemi ile yaptığımda , ancak iyi çalışıyor.

Ya da başka bir şekilde yapabilirsiniz. Görev Yöneticisini açın ve " Node.js: Sunucu tarafı JavaScript " satırını . Bunu seçin ve görevi sonlandırın . Şimdi çalışmalı.

Teşekkürler.


2

Yalnızca bir bağlantı noktasını kapatmak istiyorsanız, bu komutu çalıştırmanız yeterlidir. kill -9 $(lsof -t -i:3000)

Arasındaki fark pkillvekill birinin işlemi kildir. Kill'de bir filtre uygularsınız. sadece istediğiniz bağlantı noktasını durdurursunuz.

pkillKomut tüm düğüm işlemleri kapatır. pkill -9 node

Geliştirme sırasında ara sıra meydana gelen bellek sızıntılarını önlemek için pkill kullanın. birden fazla düğüm varsa, hepsini öldürür.

Package.json'da betiklerin kullanımı da örneklenmiştir.

"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

Windows kullanıcıları için, kullanım altındaki bağlantı noktalarını kolayca öldürmek için CurrPorts aracını kullanabilirsiniz.

görüntü açıklamasını buraya girin


1

Tarayıcınızda localhost'u açmayı deneyin. localhost:3000Adres çubuğuna şunu yazın:

Uygulama açılırsa, öncekinizin npm runhala aktif olduğu anlamına gelir . Şimdi, aynı uygulamayı tasarlıyorsanız veya başka bir uygulamayı çalıştırmak istiyorsanız kodda değişiklik yapabilir ve etkilerini görebilirsiniz, sadece kodu (daha önce çalışan uygulamanın index.js'sinde) biraz ve ( muhtemelen tarayıcı sekmesini yenileyin) çökmesini sağlamak için;) ..... Şimdi gidinnpm run start yeni uygulama dizininizden tekrar . Bu yardımcı olur umarım! :)

veya

Görev Yöneticisi'ni (WINDOWS_KEY + X> Görev Yöneticisi) açtığınızda "Node.js: Sunucu tarafı JavaScript" satırını görürsünüz. Bunu seçin ve görevi sonlandırın .... Şimdi çalışmalı !!



Değilse, .envuygulamanızın dosyasını port:3002yeni uygulamayı içerecek ve çalıştıracak şekilde değiştirin. Bu, farklı bağlantı noktalarında iki ayrı uygulama çalıştırmanıza izin verecektir. Şerefe !!


1

Windows kullanıcısı için, Görev Yöneticisi'nde Node.js'nin tüm işlemlerini basitçe durdurun

Umarım yardımcı olur


1

Linux'ta basit

  • Terminalinizi açın
  • İşlemlerden ücretsiz bağlantı noktası -> $ öldür (lsof -t -i: $ bağlantı noktası)

0

Arka planda çalışan bir yönetici işlemi olabilir ve netstatbunu göstermez. Bu yönetici işleminin PID'sini bulmak için
kullanın tasklist | grep nodeve ardındankill PID



0

Package.json komut dosyalarında şunlar yer alır:

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

Sanırım sorun benim için eski bağlantı noktasının yeniden başlatmak için nodemon tarafından zamanında kapatılmadığı zamandı. Biçici kullanarak sorunu yaşadım.


Gecikmeyi gerektiği gibi ayarlayın.
Kalkhas

0

server veya app listen () metodları 2 yere eklenebilir. Uygulama başlangıçları için listen () yöntemlerini arayın, bu nedenle Bağlantı Noktası XXXX ve Bağlantı Noktası XXXX'te Sunucu başlatıldığında geri döndüğünde zaten kullanımda olan mesaj yan yana geliyor


0

Benim durumumda VS Code kullanmaya yeni başlamıştım ve Sequelize kullanarak bir öğreticiyi takip etmiştim. Sonunda, orada listen () bulunan bir bin / www dosyası vardı. Bunu bilmiyordum ve uygulamamı node app.js çalıştırarak çalıştırıyordum, işe yaramadığında daha sonra ekspres sunucu öğelerini .listen () ile ekledim (iyi çalıştı).

Ancak nodemon ve VSCode kullanmaya başlarken, bin / www işaretlendi ve bu benim app.js'yi gerektirdi

Uzun lafın kısası .listen () 'i app.js'ye ekledim ve bunu eklememem ve bin / www'yi çalıştırmam gerekirken doğrudan app.js çalıştırıyordum.


0

Ubuntu'da önce bağlantı noktası numarasını kullanarak işlemi yakalayın: sudo lsof -i: 3000, ardından işlemi sonlandırmak için kill komutunu kullanın, örneğin işlem PID'si 4493 ise use komutu: kill 4493 , mac veya windows için ilgili komutu bulun

görüntü açıklamasını buraya girin


0

Bu sorunu çözdüm çünkü MongoDB veya daha önce bu bağlantı noktasında çalıştırdığınız başka bir uygulama var, bu yüzden çözmek için işlemi görev yöneticisinden sonlandırın veya bağlantı noktası numarasını 3000'den başka birine değiştirin.


0

Çok basit. 2 kolay adımda düzeltebilirsiniz.

  1. "PORT" adında bir anahtar / giriş varsa, ortam değişkenlerinizi kontrol edin.
  2. Bulunursa, bu girişi silin veya başka bir adla yeniden adlandırın.

Bu değişkeni başka bir programın kullandığı ortaya çıktı. Genellikle react-scripts'i başlattığınızda, bu PORT adlı bir ortam değişkeni arayacaktır.


-1

Nodemon'u çalıştırmadan önce, lütfen önce mongod'a başlayın. Bu hatayı asla almayacaksınız. :)


-2

aynı bağlantı noktasında çalışan herhangi bir işlemi şu komutu girerek kontrol edin:

sudo ps -ef

İlgili düğüm bağlantı noktasında çalışan işlemi bulabilir, ardından düğümü şu şekilde öldürebilirsiniz:

kill -9 <node id>

Sorun devam ederse, tüm düğümü öldürün

killall node

-3

Çalışan tüm bağlantı noktalarını (mac) öldürür:

killall node
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.