Erreurs

❌ Erreur Linux "Address already in use" — Causes et Solutions

🐧 Erreur Linux

Le port est déjà occupé par un autre processus

🐧 Linux 📋 5 causes 🔧 4 solutions
L'erreur Address already in use (EADDRINUSE) signifie qu'un processus tente de se lier à un port déjà utilisé par un autre processus. Fréquente au redémarrage d'un service ou lors du lancement de deux instances du même service.

⚠️ Causes possibles

⚠️
Service déjà démarré
Nginx, Apache ou un autre service tourne déjà sur ce port
⚠️
Ancien processus zombie
Un processus planté n'a pas libéré le port
⚠️
État TIME_WAIT TCP
Une connexion récente est en attente de fermeture TCP (TIME_WAIT ~60s)
⚠️
Deux services sur le même port
Apache et Nginx configurés tous deux sur le port 80
⚠️
Redémarrage trop rapide
Le socket n'a pas eu le temps d'être libéré après un kill

🔧 Solutions étape par étape

1

Trouver le processus qui utilise le port

terminal
# Méthode 1 : ss (recommandé)
ss -tulnp | grep :80
ss -tulnp | grep :443
ss -tulnp | grep :8080

# Méthode 2 : lsof
lsof -i :80
lsof -i TCP:80 -s TCP:LISTEN

# Méthode 3 : fuser
fuser 80/tcp
fuser -v 80/tcp

# Méthode 4 : netstat
netstat -tulnp | grep :80
2

Arrêter le processus qui bloque

terminal
# Arrêter proprement (SIGTERM)
kill $(lsof -t -i:80)
kill $(ss -tulnp | grep :80 | awk '{print $7}' | cut -d= -f2)

# Forcer l'arrêt (SIGKILL) si kill ne suffit pas
kill -9 $(lsof -t -i:80)
fuser -k 80/tcp

# Arrêter le service systemd
systemctl stop nginx
systemctl stop apache2
3

Gérer l'état TIME_WAIT

terminal
# Voir les connexions en TIME_WAIT
ss -tan | grep TIME-WAIT | grep :80

# Permettre la réutilisation du port (SO_REUSEADDR)
# Dans /etc/sysctl.conf :
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# Appliquer immédiatement
sysctl -p

# Attendre que TIME_WAIT expire (~60 secondes)
4

Changer le port du service

terminal
# Nginx — changer le port d'écoute
nano /etc/nginx/sites-available/default
# Modifier : listen 80; → listen 8080;
nginx -t && systemctl reload nginx

# Apache — changer le port
nano /etc/apache2/ports.conf
# Modifier : Listen 80 → Listen 8080

# Node.js — changer le port dans le code
# PORT=3001 node app.js

🛡️ Comment éviter cette erreur

  • ✅ Toujours utiliser ss -tulnp | grep :PORT avant de démarrer un service sur un nouveau port
  • ✅ Activer net.ipv4.tcp_tw_reuse = 1 dans sysctl.conf pour les environnements à fort trafic
  • ✅ Ne pas lancer deux services web (nginx + apache) sans reverse proxy clair
  • ✅ Utiliser systemctl stop plutôt que kill -9 pour laisser le temps aux sockets de se fermer proprement
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google