'EADDRINUSE: address already in use' sorununun çözümü

"EADDRINUSE: address already in use" hatası, bir sunucunun belirli bir portu dinlemeye çalıştığında ve bu portun zaten başka bir işlem tarafından kullanımda olduğu durumlarda ortaya çıkar. Bu hatanın nedeni, sunucunun belirli bir portu kullanmak için izin almaya çalışırken, o portun zaten başka bir işlem tarafından kullanımda olmasıdır. Daha çok nodejs, java ile hazırlanmış projelerde karşımıza çıkan bu hatalar aslında en basit şekliyle işletim sistemi restart edilerek çözülebilir. Ancak production olarak çalışan sunucularda bu tarz shutdown işlemleri kabul görmemektedir.

Bu makalemizde, "EADDRINUSE: address already in use" hatası ile karşılaştığınızda sorunu Windows, Linux ve Mac işletim sistemlerinde çalışan cihazlarda nasıl giderebileceğinizi paylaşacağız.

MAC ve Linux İşletim Sisteminde:
Aşağıda yazılı olan fonksiyonu kullanarak hatayı aldığınız portu kullanan diğer işleme ait PID ( Process ID) verisine ulaşabilirsiniz:
  1. lsof -i tcp:port_number
    

Komutta kullanılan "port_number" belirli bir port numarası olmalıdır. Bu komut, belirli bir portu kullanan işlemi görüntüler. Terminalde sorgulama sonrası aşağıdaki şekilde bir çıktı terminalde görüntülenecektir.

  1. COMMAND PID   USER  FD  TYPE DEVICE             SIZE/OFF NODE NAME 
    node    12345 chen5 31u IPv4 0x8b1721168764e4bf 0t0 TCP *:strexec-s (LISTEN)
    

Listelenen satırda PID altında görüntülenen numarayı "process_id" alanına yazıp komutu çalıştırınız.

  1. kill -9 process_id
    

İşlemin hızlı bir şekilde sorunsuz kill edileceğinden emin olmak için -9 komutunu kullanabilirsiniz. Örneğin, "sudo kill -9 1234" komutunu kullanarak 1234 kimlik numaralı bir işlemi sonlandırabilirsiniz.

Windows İşletim Sisteminde:
Aşağıda yazılı olan adımları takip ederek terminali açıp ilgili processi komut satırı üzerinden kill edebilirsiniz:
  1. netstat -ano | findstr :port_number
    

Komutta kullanılan "port_number" belirli bir port numarası olmalıdır. Bu komut, belirli bir portu kullanan işlemi görüntüler. Terminalde sorgulama sonrası aşağıdaki şekilde bir çıktı terminalde görüntülenecektir.

  1. Proto Local Address Foreign Address State PID 
    TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 11223
    

Listelenen satırda PID altında görüntülenen numarayı "process_id" alanına yazıp komutu çalıştırınız.

  1. taskkill /F /PID process_id
    

Yukarda tanımlı komutta /F parametresi ile taskın kill edilmesini force etmekteyiz. /PID komutu ile de kill işleminin process id ile gerçekleştirmek istediğimizi belirtmekteyiz.

Örneğin, "sudo kill -9 1234" komutunu kullanarak 1234 kimlik numaralı bir işlemi sonlandırabilirsiniz.

Eğer Windows işletim sisteminde komut satırı üzerinden işlem yapmayı pek tercih etmiyorsanız aşağıda Görev Yöneticisi üzerinden de ilgili portun kill edilmesini sağlayabilirsiniz. Bunun için cihazınızda Görev Yöneticisini açmanız ve listelenen tasklarda size ait olanı bulup sağa tıklayıp Taskı Durdur seçeneğini seçmenizdir. 

comments powered by Disqus