LinuxSystèmePerformance

Linux : tuning des performances système

9 septembre 2026 · Sphinx-Digital

Un serveur Linux par défaut est configuré pour une utilisation généraliste. Pour des charges spécifiques — base de données, serveur web haute charge, Kafka — quelques ajustements sysctl et de configuration peuvent doubler les performances.

Diagnostiquer avant d’optimiser

# Vue d'ensemble des goulots d'étranglement
top -d 1          # CPU, mémoire, load average
vmstat 1          # CPU wait (wa), swap
iostat -xz 1      # saturation disque (%util, await)
ss -s             # statistiques sockets
free -h           # mémoire et swap

# Identifier les processus qui consomment le plus de I/O
iotop -ao

# Analyser les connexions réseau
ss -tunap | grep ESTABLISHED | wc -l
ss -s

Réseau : optimiser le throughput

# /etc/sysctl.d/99-network-tuning.conf

# Taille des buffers TCP
net.core.rmem_max = 134217728        # 128 MB
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# File d'attente réseau
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 65535           # backlog des connexions TCP
net.ipv4.tcp_max_syn_backlog = 65535

# Réutilisation des ports (important pour les serveurs web à fort trafic)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535

# Protection contre les attaques SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2

# BBR : algorithme de contrôle de congestion moderne (Linux 4.9+)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

Mémoire : éviter le swap et tuner le cache

# /etc/sysctl.d/99-memory-tuning.conf

# Réduire le swap agressif (0-100, 60 par défaut)
# Pour les bases de données : 1 ou 0
vm.swappiness = 10

# Ne pas trop sacrifier la mémoire de cache
vm.vfs_cache_pressure = 50

# Désactiver les hugepages transparentes pour PostgreSQL
# (les activer pour les charges de calcul intensif)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

Limites de fichiers : indispensable pour les serveurs web

# Voir les limites actuelles
ulimit -n          # max fichiers ouverts par process
cat /proc/sys/fs/file-max  # max système total

# /etc/security/limits.conf
www-data  soft  nofile  65536
www-data  hard  nofile  65536
postgres  soft  nofile  65536
postgres  hard  nofile  65536
*         soft  nproc   65536
*         hard  nproc   65536

# /etc/sysctl.d/99-file-limits.conf
fs.file-max = 2097152
fs.nr_open = 1048576

I/O Scheduler : selon le type de stockage

# Voir le scheduler actuel
cat /sys/block/sda/queue/scheduler

# SSD NVMe : none (pas de scheduling, le disque gère lui-même)
echo none > /sys/block/nvme0n1/queue/scheduler

# SSD SATA : mq-deadline
echo mq-deadline > /sys/block/sda/queue/scheduler

# HDD mécanique : bfq (meilleur pour les charges mixtes)
echo bfq > /sys/block/sda/queue/scheduler

# Persistant via udev
cat > /etc/udev/rules.d/60-ioscheduler.rules << 'EOF'
ACTION=="add|change", KERNEL=="nvme*", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="sd*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
EOF

Profil de performance PostgreSQL

# /etc/sysctl.d/99-postgres.conf
# Mémoire partagée (doit être > shared_buffers PostgreSQL)
kernel.shmmax = 17179869184   # 16 GB
kernel.shmall = 4194304

# Éviter l'OOM killer sur les process postgres
vm.overcommit_memory = 2
vm.overcommit_ratio = 80

# Huge pages pour PostgreSQL (optionnel mais recommandé)
vm.nr_hugepages = 1024
# Appliquer immédiatement (sans reboot)
sysctl -p /etc/sysctl.d/99-network-tuning.conf
sysctl -p /etc/sysctl.d/99-memory-tuning.conf

Notre formation Linux couvre l’administration système et le tuning de performance en profondeur.