🐧 Linux

linux-linux-troubleshooter

Diagnostic de problèmes Linux — performance, disque, mémoire, réseau et processus.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- linux-linux-troubleshooter --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } linux-linux-troubleshooter -Launch"

🚀 Déjà installé ?

claude "/linux-linux-troubleshooter"

Ou tapez /linux-linux-troubleshooter dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

Linux lenttophtopdfdmesgstracedebug Linux

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/linux-linux-troubleshooter ~/.claude/skills/

Payload du plugin : skills/linux-linux-troubleshooter · source éditable : linux-skills/linux-troubleshooter

📖 Manuel

Linux Troubleshooter

Étape 0 — Snapshot initial (toujours en premier)

Avant tout : collecter les métriques de référence. Ne jamais agir sans baseline.

uptime                          # load average 1/5/15 min
free -h                         # mémoire physique + swap
df -h && df -i                  # espace disque + inodes
top -bn1 | head -20             # CPU / processus snapshot
dmesg -T | tail -30             # messages noyau récents
systemctl --failed              # services en échec

Critère de décision :


Étape 1 — CPU et processus

# Top 10 processus CPU
ps aux --sort=-%cpu | head -12

# Charge par core (q pour quitter)
mpstat -P ALL 1 5

# Profiling noyau temps réel
perf top -s comm,dso

# Trace appels système d'un PID (PROD : durée courte seulement)
strace -c -p <PID>              # résumé des appels, moins intrusif que -p seul

Critères :


Étape 2 — Mémoire

free -h
vmstat 1 5                      # si/so > 0 = swap actif
cat /proc/meminfo | grep -E 'MemAvailable|Dirty|Writeback|Slab'

# OOM killer
dmesg -T | grep -i 'oom\|killed process'
journalctl -k --since "1h ago" | grep -i oom

# Top 10 consommateurs RAM
ps aux --sort=-%mem | head -12

# Détail mémoire d'un processus
cat /proc/<PID>/status | grep -E 'VmRSS|VmSwap'
smem -rs pss | head -15         # si smem installé

Critères :


Étape 3 — Disque et I/O

# Saturation I/O
iostat -xz 1 5                  # %util > 80 % = disque saturé
iotop -o -b -n 3                # processus générateurs d'I/O

# Trouver les gros fichiers
du -ah /var /tmp /home 2>/dev/null | sort -rh | head -20

# Inodes épuisées (df -h OK mais df -i saturé)
df -i

# Fichiers ouverts supprimés mais non libérés
lsof | grep deleted | awk '{print $1, $7, $9}' | sort -k2 -rn | head -10
# Solution : redémarrer le process fautif pour libérer l'espace

# Vérification système de fichiers (hors production, FS démonté)
fsck -n /dev/sdX

Critères :


Étape 4 — Réseau

# Connectivité et latence
ping -c 5 8.8.8.8
traceroute -n 8.8.8.8

# Interfaces et routes
ip addr show
ip route show

# Ports en écoute + PID
ss -tulnp

# Connexions établies / TIME_WAIT
ss -s
ss -tn state time-wait | wc -l  # > 10 000 = possible épuisement ports

# Capture réseau ciblée
tcpdump -i eth0 -n -c 200 host <IP>
tcpdump -i eth0 -n -c 200 port 443 -w /tmp/cap.pcap

# DNS
dig @8.8.8.8 example.com +short
resolvectl status               # systemd-resolved

Critères :


Étape 5 — Services et logs

# État d'un service
systemctl status nginx --no-pager -l

# Logs temps réel
journalctl -u nginx -f
journalctl -xe --since "30 min ago"

# Logs anciens (erreurs critiques)
grep -rE 'error|fail|crit|panic' /var/log/ --include='*.log' -l
journalctl -p err..emerg --since "2h ago"

# Dépendances d'un service qui ne démarre pas
systemctl list-dependencies nginx --failed

# Socket/port occupé
fuser 80/tcp
ss -tulnp | grep ':80'

Étape 6 — Appliquer et valider

  1. Snapshot avant (métriques de l'étape 0 sauvegardées)
  2. Appliquer le correctif minimal (redémarrer service, libérer espace, tuer le bon processus)
  3. Snapshot après — comparer avec l'avant
  4. Si le problème revient → investiguer la cause racine, pas juste les symptômes
# Redémarrage propre d'un service
systemctl restart <service>
systemctl status <service>

# Libérer le cache page (urgence RAM — PROD avec précaution)
sync && echo 3 > /proc/sys/vm/drop_caches

# Augmenter swap temporairement
fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile

Garde-fous et anti-patterns

Anti-patternRisqueBonne pratique
kill -9 sans investigationCorruption de données, état inconsistantEnvoyer SIGTERM d'abord, attendre 10 s
strace -p <PID> en prod longtempsRalentit le processus de 2x à 10xUtiliser strace -c (résumé) ou perf trace
echo 3 > /proc/sys/vm/drop_caches en prodSpike I/O brutal, latences en cascadeRéservé aux urgences RAM critique hors heure
Modifier /etc/sysctl.conf sans testerRégression réseau ou mémoireTester avec sysctl -w puis valider avant persistance
Supprimer des logs pour libérer de l'espacePerte de preuves pour l'audittruncate -s 0 /var/log/app.log si actif, ou logrotate
Relancer un service sans lire ses logsBoucle de crash, masquage du problèmeToujours lire journalctl -u <service> -n 50 avant restart
Diagnostiquer sur un snapshot prod sans baselinePas de référence pour validerToujours collecter métriques avant action

Monitoring préventif (post-incident)

# Activer collecte historique (sar)
systemctl enable --now sysstat
sar -u 1 10                     # CPU 10 dernières secondes

# Alertes simples sans Prometheus
# CPU > 80% pendant 5 min
nohup sh -c 'while true; do
  load=$(awk "{print \$1}" /proc/loadavg)
  ncpu=$(nproc)
  if awk "BEGIN{exit !($load > $ncpu * 0.8)}"; then
    echo "HIGH LOAD $load" | mail -s ALERT admin@example.com
  fi
  sleep 60
done' &

Pour les environnements avec Prometheus + Alertmanager, préférer les alertes sur node_load15, node_memory_MemAvailable_bytes, node_filesystem_avail_bytes.